Dopieszczenie wyrażenia regularnego, Minimum kilka cyfr |
Dopieszczenie wyrażenia regularnego, Minimum kilka cyfr |
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 -------------------- |
|
|
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%) |
|
|
|
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 -------------------- |
|
|
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". |
|
|
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. -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 08:01 |