91 Shares 6992 views

PHP (regex) – co to jest? Przykłady i sprawdzanie wyrażenia regularne

Podczas pracy z tekstem w każdym nowoczesnym języku programowania, programiści stale spotykają się z celami walidacji wejścia pod kątem zgodności z pożądanym wzorem, wyszukiwać i zastępować fragmenty testowe i inne rodzaje operacji przetwarzania informacji znaków. Rozwijać swoje własne algorytmy walidacji prowadzi do straty czasu, zgodności kodu i złożoności jej rozwoju i modernizacji.


Gwałtowny rozwój języków internetowych i web-design wymagane tworzenie wszechstronnych i kompaktowych pomocą przetwarzania tekstu przy minimalnej ilości wymaganej dla tego kodu. To nie jest wyjątkiem i jest popularny wśród początkujących jak i profesjonalnych programistów języka PHP. Regularne język wyrażenie jako szablonów tekstowych do upraszcza obsługę tekstu i zmniejszyć kod dziesiątki i setki wierszy. Wiele problemów nie można rozwiązać w ogóle bez niego.

Wyrażenia regularne w PHP

język PHP ma trzy mechanizmy do pracy z wyrażeń regularnych – «ereg», «mb_ereg» i «preg». Najczęstszym jest interfejs «preg», którego funkcje zapewniają dostęp do biblioteki PCRE wsparcia wyrażenie regularne, pierwotnie opracowany dla języka Perl, który jest zawarty w pakiecie PHP. Preg poszukiwania funkcje w danym dopasowywania łańcuch tekstowy, według pewnego wzorca w języku wyrażeń regularnych.

Podstawy składni

W ramach krótkiego artykułu jest to niemożliwe, aby opisać szczegółowo cała składnia wyrażeń regularnych, bo to jest specjalny literatura. Prezentujemy tylko główne elementy, aby pokazać możliwości dla deweloperów i zrozumieć przykłady kodu.

W PHP wyrażenie regularne jest formalnie zdefiniowany bardzo trudne, a zatem uproszczenia opisu. Wyrażenie regularne jest ciąg tekstowy. Składa się z dedykowanego szablonu separatora i modyfikatora wskazującą drogę do jej obsługi. Możliwe włączenie różnych alternatyw i powtórzeń wzorów.

Na przykład do ekspresji / d {3} – d {2} – d {2} / m rozdzielacz jest "/", a następnie przez matrycę, a symbol «M» jest modyfikator.

Cała moc wyrażeń regularnych jest kodowany za pomocą meta-znaków. Głównym Metaznak język jest odwrotny ukośnik – „”. Zmienia typ następujących znaków na przeciwległym (tj. E. przekształcona w zwykłą wieloznaczny i vice versa). Innym ważnym Metaznak jest linią prostą «|» określa alternatywny szablon. Więcej przykładów meta-znaki:

^ Zacznij przedmiot lub ciąg
( Zacznij podciąg wzorca
) koniec podciąg wzorca
{ Rozpocznij kwantyfikator
} koniec kwantyfikator
d cyfry dziesiętne od 0 do 9
D dowolny znak, który nie jest liczbą
s pusty symbol, przestrzeń, tab,
w Słownik symboli

PHP, przetwarzania wyrażeń regularnych, przestrzeń traktowany jako oddzielny ważnej postaci, więc ekspresji XYZ i ABC Gdzie są różne.

podwzorów

W PHP regularnych podwzorów w nawiasie i są czasami nazywane „podwyrażeń”. Wykonać następujące funkcje:

  1. alternatywy alokacji. Na przykład, wzór ciepła (coś | Ptak |) zbiega się ze słowa „ciepło”, „Firebird” i „na gorąco”. I bez nawiasów będzie to tylko pusty ciąg, „ptak” i „na gorąco”.

  2. "Spectacular" podciąg wzorca. Oznacza to, że jeśli wzorzec dopasowany podciąg, a następnie zwraca wszystkie mecze. Dla jasności, dajemy przykład. Biorąc pod uwagę następujące wyrażenie regularne: zwycięzca otrzymuje ((złoto | złotem) (medal | cup)) – i ciąg do dopasowania „zwycięzca otrzyma złoty medal.” Poza początkowym zwrotem, wyniki wyszukiwania zostaną wydane: „Złoty Medal”, „medal”, „złoto”.

Operatorzy powtórzeń (kvadrifikatory)

W kompilacji wyrażenia regularnego jest często niezbędne do analizy powtarzania cyfr i symboli. To nie jest problem, jeśli nie za dużo powtórzeń. Ale co zrobić, gdy nie znamy ich dokładną liczbę? W tym przypadku konieczne jest stosowanie specjalnych metaznaków.

Dla opisu powtórzeń stosowanych kvadrifikatory – metaznaki, aby określić liczbę. Kvadrifikatory są dwojakiego rodzaju:

  • powszechne w nawiasie;
  • zmniejszona.

Ogólny kwantyfikator dotknięty minimalnej i maksymalnej dopuszczalnej liczby powtórzeń elementu w postaci dwóch liczb w obejmach, takich jak X {2,5}. Jeżeli maksymalna liczba powtórzeń, nie jest znana, drugi argument nie podano X {2}.

Skrócone kwantyfikatorów są symbole najczęściej powtórzeń w celu uniknięcia niepotrzebnego składni przeciążeniem. Zazwyczaj istnieją trzy kawałki:

1. * – zero lub więcej powtórzeń, co jest równoważne {0}.

2. + – jeden lub więcej powtórzeń, czyli {1} …

3.? – zero lub jeden tylko powtórzyć – {0,1}.

Przykłady regex

Dla tych, którzy uczą, przykłady wyrażeń regularnych – najlepszego podręcznika. Dajemy kilka, które pokazują swoje możliwości przy minimum wysiłku. Cały kod jest w pełni kompatybilny z wersjami PHP 4.x i powyżej. Aby w pełni zrozumieć składnię i korzystanie z wszystkich funkcji językowych Polecamy książkę J .. Friedl „wyrażenia regularne”, który w pełni uznane składnia, a istnieją przykłady wyrażeń regularnych nie tylko PHP, ale również dla Python, Perl, MySQL, Java, Ruby i C #.

Walidacja e-mail

Zadaniem. Jest to strona internetowa, na której użytkownik jest proszony adres e-mail. Wyrażenie regularne musi sprawdzić poprawność adresów przed wysłaniem wiadomości. Sprawdź nie gwarantuje, że określona skrzynka rzeczywiście istnieje i odbiera wiadomości. Ale pozbyć się oczywiście błędne adresy może.

Decyzja. Jak w przypadku każdego języka programowania w PHP regex weryfikacja Adres e-mail mogą być realizowane na różne sposoby i przykłady w tym artykule nie jest ostateczny i jedyny wybór. Dlatego w każdym przypadku, podamy listę wymagań, które muszą być brane pod uwagę przy programowaniu i specyficzny realizacja zależy wyłącznie od dewelopera.

Zatem wyrażenie testuje ważny e-mail, należy sprawdzić następujące warunki:

  1. Obecność w wyjściowym składzie symbol @, a nie ma żadnych przerw.
  2. Część domena adres symbolu @, zawiera tylko poprawne znaki nazw domen. To samo odnosi się do nazwy użytkownika.
  3. Podczas sprawdzania nazwy użytkownika jest niezbędne do określenia obecności znaków specjalnych, takich jak apostrof lub pionowej linii. Tego rodzaju symbole są potencjalnie niebezpieczne i może być zawarty w takich rodzajów napadów że SQL iniekcji. Unikaj adresów.
  4. nazwy użytkownika umożliwiają tylko jeden punkt, który nie może być pierwszym lub ostatnim znakiem w ciągu.
  5. Nazwa domeny musi zawierać co najmniej dwie i nie więcej niż sześć znaków.

Przykładowo, biorąc pod uwagę wszystkie te warunki widać na rysunku.

Walidacja adresu URL

Zadaniem. Sprawdzić, czy podany ciąg tekstowy jest poprawny adres URL adres. Po raz kolejny możemy zauważyć, że wyrażenia regularne sprawdzanie URL mogą być realizowane na różne sposoby.

Decyzja. Nasza ostateczna wersja jest następująca:

/^(https?://)?([da-z.-]+).([az.]{2,6})([/w .-] *), * /? $ /

Teraz analizować jego komponenty bardziej szczegółowo za pomocą rysunku.

zastrzeżenia 1 Przed URL nie powinien mieć żadnych znaków
zastrzeżenia 2 Sprawdzić obecność obowiązkowego prefiksem «http»
pozycja 3 Nie może być żadnych symboli
zastrz.4 Jeśli istnieje «s» punkty URL do połączenia zabezpieczonego «https»
zastrz.5 Wymagane fragmentem „//”
zastrzeżenia 6 Brak znaków
str. 7-9 Weryfikacja pierwszą domenę poziomu i obecność punktu
p.10-13 Weryfikowanie domeny pisania drugiego poziomu oraz punkt
p.14-17

Struktura plików URL – zbiór liczb, liter, znaków podkreślenia, kreski, kropki, a na końcu ukośnik

Sprawdź numery kart kredytowych

Zadaniem. Trzeba zaimplementować sprawdzanie poprawności wprowadzonego numeru karty kredytowej z najbardziej popularnych systemów płatności. Wariant tylko dla kart Visa i MasterCard.

Decyzja. Podczas tworzenia wyrażenia trzeba wziąć pod uwagę ewentualną obecność luk w sali wejściowej. Cyfry na mapie są podzielone na grupy w celu łatwiejszego czytania i dyktanda. Dlatego naturalne jest, że dana osoba może spróbować wprowadzić numer w ten sposób (tj. E. Używanie spacji).

Napisz uniwersalny wyraz, który bierze pod uwagę możliwe spacji ani myślników, jest bardziej skomplikowane niż po prostu usunąć wszystkie znaki z wyjątkiem cyfr. Dlatego zalecamy użycie wieloznaczny wyraz / D, który usuwa wszystkie znaki z wyjątkiem cyfr.

Teraz można przejść bezpośrednio do liczby kontrolnej. Wszystkie firmy, emitenci kart kredytowych użyć wyjątkowy format numeryczny. W przykładzie jest używany, a klient nie musi wprowadzić nazwę firmy – jest określona przez liczbę. Karty Visa zawsze zaczynają się od cyfr 4 i mają długość 13 lub 16 cyfr. MasterCard zaczyna się w przedziale 51-55 z długim numerem 16. W rezultacie otrzymujemy następujące wyrażenie:

Przed realizacji zamówienia może być dodatkowo testowana ostatnich cyfr numeru, który jest obliczany na algorytm luhna.

Weryfikacja numeru telefonu

Zadaniem. Sprawdzenie poprawności wprowadzonego numeru telefonu.

Decyzja. Liczba cyfr w stacjonarnych i komórkowych numerów telefonów różnią się znacznie w zależności od kraju, dlatego powszechnie sprawdzić za pomocą wyrażeń regularnych, numer telefonu poprawnie niemożliwe. Ale numery międzynarodowe mają ścisły format i idealna do sprawdzania wzorca. Tym bardziej, że coraz więcej krajowych operatorów telefonicznych staramy się spełniać ten sam standard. Struktura pokój jest w następujący sposób:

+ CCC.NNNNNNNNNNxEEEE gdzie:

– C – to kod kraj składający się z 1-3 cyfr.

– N – numer do 14 cyfr.

– E – opcjonalne rozszerzenie.

Plus jest nieodzownym elementem, a znak X jest obecny tylko w razie potrzeby rozszerzenia.

W efekcie mamy następujące wyrażenie:

^ + [0-9] {1,3 } [0-9] {4,14} (?:. X +)? $.

Liczby w zakresie

Zadaniem. Jest to konieczne, aby zapewnić koincydencji całkowitą od określonego zakresu. Ponadto konieczne jest, aby znaleźć wyrażenie regularne tylko numery z tego zakresu.

Decyzja. Oto kilka wyrażeń do jednych z najczęstszych przypadkach:

Określić godziny od 1 do 24, ^ (1 [0-2] | [1-9]) $
Dzień miesiąca 1-31 ^ (3 [01] | [12], [0-9] | [1-9]) $
Sekund lub minut 0-59 ^ [1-5]? [0-9] $
Liczbę od 1 do 100 * (100? | [1-9] [0-9]) $
Dzień roku 1-366 ^ (36 [0-6] | 3 [0-5], [0-9] | [12], [0-9] {2} |? [1-9], [0-9]) $

Szukaj Adresy IP

Zadaniem. Konieczne jest ustalenie, czy dany ciąg jest prawidłowy adres IP w formacie IPv4 w zakresie od 000.000.000.000-255.255.255.255.

Decyzja. Jak w przypadku każdego problemu w języku PHP, wyrażenie regularne ma wiele varintov. Na przykład w ten sposób:

Online sprawdzanie wyrażeniach

Sprawdzić regex poprawnie dla początkujących może być trudne ze względu na złożoność składni, która różni się od „normalnych” języków programowania. Aby rozwiązać ten problem, istnieje wiele testery forum wyrażeniami, które sprawiają, że łatwo sprawdzić poprawność utworzonego w realnym tekst szablonu. Programista wprowadza dane wyrażenie i weryfikacji i od razu zobaczyć wyniki przetwarzania. Zazwyczaj nie ma przedstawić punkt odniesienia, którego szczegóły wyrażeń regularnych, przykłady i różnice wdrożeniowe dla najbardziej rozbudowanych języków.

Jednak aby w pełni zaufania usługi online wyniki nie jest zalecany dla wszystkich programistów, którzy korzystają z PHP. Wyrażenie regularne jest napisany i zweryfikowane osobiście, podnosi kwalifikacje i zagwarantować braku błędów.