Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dopieszczenie wyrażenia regularnego, Minimum kilka cyfr
markonix
post 2.07.2018, 00:19:16
Post #1





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Mamy takie różne numery zgłoszeń, które mają dużo formatów w zależności od firmy i chciałbym mój regex ulepszyć aby nie łapał za dużo.
Mam 100% pewność, że te numery mimo różnego formatu zawierają jakieś cyfry, na pewno ich będzie więcej niż kilka.
Ktoś pomoże dodać ten warunek?

Tutaj to co mam teraz wraz z przykładami co powinno łapać, a co nie:
https://regex101.com/r/IzEGsc/1

Mógłbym sprawdzić matches w drugiej pętli ale to by było słabe.

Ten post edytował markonix 2.07.2018, 00:19:50


--------------------
Go to the top of the page
+Quote Post
by_ikar
post 2.07.2018, 07:50:30
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


https://regex101.com/r/IzEGsc/2
Go to the top of the page
+Quote Post
markonix
post 2.07.2018, 11:02:06
Post #3





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Próbowałem z tym "Positive Lookahead" bo często w Google na to trafiałem ale nie potrafiłem tego zastosować.

Jednak z Twoim regex jest coś nie tak jak dodałem parę błędnych numerów oraz chciałbym dodać aby to było minimum kilka cyrf. Chyba \D łapie białe znaki?
https://regex101.com/r/lnoaih/1

Tu coś próbowałem ale znowu nie łapie mi tych ze slashami:
https://regex101.com/r/osflta/1


--------------------
Go to the top of the page
+Quote Post
by_ikar
post 2.07.2018, 12:55:12
Post #4





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Już wcześniej wydawało mi się że będziesz miał szerszy zakres. Widzisz, problem tutaj polega na tym że próbujesz wyłapać rzeczy które mogą wystąpić w różnej kolejności, dlatego łapie więcej niż powinien.

Nie da się tego jakoś idealnie ugrać jednym uniwersalnym regexem, najlepiej jakbyś zrobił kilka wyrażeń, gdzie każde będzie łapać specyficzne "formaty", bo zapewne te formaty mają jakiś schemat i każdy taki schemat musisz sobie wypisać i użyć LUB żeby użyć wielu takich wyrażeń. Wówczas łatwiej ci będzie wyłuskiwać tylko to co chcesz.

Cytat
Chyba \D łapie białe znaki?


tak, to jest uproszczony odpowiednik [^0-9], możesz zrobić coś takiego: [\w\/-] tylko wówczas może to być zbyt bardzo zachłanne. Tutaj poprawione dla przykładów które podesłałeś: https://regex101.com/r/lnoaih/2

nie mniej, próbuj to ugrać poprzez wyrażenie per format, wówczas łatwiej ci będzie połączyć kilka takich wyrażeń w jedno, lub skrócić wyrażenie, bo będziesz miał "szerszy obraz".
Go to the top of the page
+Quote Post
markonix
post 2.07.2018, 20:55:33
Post #5





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Mam ten luksus, że w bazie już mam troszkę takich różnych umów więc potrafię właśnie określić zakresów znaków specjalnych i to ile mają minimalne cyfr nie licząc liter (które w ogóle mogą nie wystąpić).
Nie planuje dopisywać osobnych regexów dla różnych firm bo te się zmieniają tu często oraz same mogą zmienić numeracje, a system musi być samowystarczalny bez programisty.

Chciałbym w jednym bo to nie musi być jakieś bezbłędne, to ma wyłapać 90% przypadków (numer w tytule e-maila).
Potem i tak te numery weryfikuje z tymi w DB i ograniczenie tych wyników ma służyć tylko zmniejszeniu liczby zapytań.

Twoja druga wersja jak widać daje radę więc dzięki.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 19:16