/ / PHP (regex) - co to jest? Przykłady wyrażeń regularnych i walidacja

PHP (regex) - co to jest? Przykłady wyrażeń regularnych i walidacja

Podczas pracy z tekstami w dowolnym współczesnym językuprogramiści nieustannie stają przed zadaniami sprawdzania wprowadzonych danych pod kątem zgodności z pożądanym wzorcem, znajdowania i zastępowania fragmentów testowych oraz innych typowych operacji przetwarzania informacji symbolicznych. Tworzenie własnych algorytmów weryfikacyjnych prowadzi do straty czasu, niekompatybilności kodu programu oraz złożoności w jego rozwoju i modernizacji.

Szybki rozwój Internetu i języków programowania WEBwymagało stworzenia uniwersalnych i kompaktowych sposobów przetwarzania informacji tekstowych z minimalną ilością wymaganego do tego kodu. Język PHP, który jest popularny wśród początkujących i profesjonalnych programistów, nie jest wyjątkiem. Wyrażenia regularne jako język szablonów tekstowych umożliwiają uproszczenie zadań przetwarzania tekstu i zredukowanie kodu programu o dziesiątki lub setki wierszy. Bez niego wielu zadań nie da się w ogóle rozwiązać.

wyrażenie regularne php

Wyrażenia regularne w PHP

Język PHP zawiera trzy mechanizmy do pracy zwyrażenia regularne to "ereg", "mb_ereg" i "preg". Najpopularniejszym jest interfejs „preg”, którego funkcje zapewniają dostęp do biblioteki regex PCRE, pierwotnie opracowanej dla języka Perl, która jest dołączona do PHP. Funkcje Preg szukają dopasowań w danym ciągu tekstowym zgodnie z pewnym wzorcem w języku wyrażeń regularnych.

Podstawy składni

przykłady wyrażeń regularnych

W ramach krótkiego artykułu nie da się szczegółowo opisaćopisz całą składnię wyrażeń regularnych, istnieje na to specjalna literatura. Podamy tylko podstawowe elementy, aby pokazać szerokie możliwości programisty i zrozumieć przykłady kodu.

W PHP wyrażenie regularne jest formalnie zdefiniowanebardzo trudne, dlatego uprościmy opis. Wyrażenie regularne to ciąg tekstowy. Składa się z rozgraniczonego szablonu i modyfikatora, który określa, jak go obsłużyć. W szablonach można umieszczać różne alternatywy i powtórzenia.

Na przykład w wyrażeniu / d {3} -d {2} -d {2} / m separator będzie „/”, po którym następuje wzór i symbol "M" będzie modyfikatorem.

Cała moc wyrażeń regularnych jest zakodowana za pomocąza pomocą metaznaków. Głównym metaznakiem języka jest ukośnik odwrotny – „”. Zmienia typ następnego znaku na przeciwny (czyli zwykły znak staje się metaznakiem i odwrotnie). Innym ważnym metaznakiem jest ukośnik „|”, który określa alternatywy dla wzorca. Więcej przykładów metaznaków:

^Początek obiektu lub linii
(Początek podwzorca
)Zakończ wzór podrzędny
{Początek kwantyfikatora
}Koniec kwantyfikatora
dcyfra dziesiętna od 0 do 9
D.dowolny znak niecyfrowy
zpuste, spacja, tabulator
wsymbol słownictwa

PHP traktuje spację jako oddzielny znak znaczący podczas przetwarzania wyrażeń regularnych, więc wyrażenia ABCGDE i ABC WHERE są różne.

Wzorce podrzędne

W PHP regularne podwzorce są ujęte w nawiasy i czasami nazywane są „podwyrażeniami”. Pełnią następujące funkcje:

  1. Podświetlanie alternatyw... Na przykład szablon ciepło (niektóre | ptak |) pasuje do słów „Ciepło”, „ognisty ptak” i "piec"... A bez nawiasów będzie to tylko pusty ciąg „ptak” i „pieczeń”.

  2. „Ekscytujący” wzór podrzędny. Oznacza to, że jeśli podciąg pasuje do wzorca, jako wynik zwracane są wszystkie dopasowania. Dla jasności podamy przykład. Biorąc pod uwagę następujące wyrażenie regularne: zwycięzca otrzymuje ((złoto | pozłacane) (medal | puchar)) - oraz ciąg do wyszukiwania dopasowań: „Zwycięzca otrzymuje złoty medal”... Oprócz oryginalnej frazy wyszukiwanie zwróci: "Złoty medal", „Medal”, „złoto”.

Operatory powtórzeń (kwadryfikatory)

Podczas pisania wyrażeń regularnych jest to bardzo powszechnekonieczne jest przeanalizowanie powtórzeń liczb i symboli. Nie stanowi to problemu, jeśli nie ma zbyt wielu powtórzeń. Ale co, jeśli nie znamy ich dokładnej liczby? W takim przypadku musisz użyć specjalnych metaznaków.

Do opisu powtórzeń stosuje się quadrifiers – metaznaki do określenia liczby. Quadrifiers są dwojakiego rodzaju:

  • ogólne, ujęte w nawiasy;
  • skrócony.

Wspólny kwantyfikator dotyka minimum imaksymalna dozwolona liczba powtórzeń elementu w postaci dwóch liczb w nawiasach klamrowych, np. x {2,5}. Jeśli maksymalna liczba powtórzeń jest nieznana, pomijany jest drugi argument: x {2,}.

Skrócone kwantyfikatory to symbole najczęstszych powtórzeń, aby uniknąć niepotrzebnego przeciążenia składni. Powszechnie stosowane są trzy skróty:

1. * - zero lub więcej powtórzeń, co odpowiada {0,}.

2. + - jedno lub więcej powtórzeń, czyli {1,}.

3.? - zero lub tylko jedno powtórzenie - {0,1}.

Przykłady wyrażeń regularnych

Dla osób uczących się wyrażeń regularnych,przykłady są najlepszym samouczkiem. Przedstawimy kilka, które przy minimalnym wysiłku pokazują swoje szerokie możliwości. Wszystkie kody programu są w pełni kompatybilne z PHP 4.x i nowszymi wersjami. Dla pełnego zrozumienia składni i wykorzystania wszystkich funkcji języka polecamy książkę J. Friedla "Wyrażenia regularne", która w pełni analizuje składnię i podaje przykłady wyrażeń regularnych nie tylko w PHP, ale także dla języki Python, Perl, MySQL, Java, Ruby i C#.

Sprawdzanie poprawności adresu e-mail

Zadanie. Istnieje strona internetowa, na którejwymagany jest adres e-mail odwiedzającego. Wyrażenie regularne musi sprawdzić poprawność otrzymanego adresu przed wysłaniem wiadomości. Weryfikacja nie gwarantuje, że określona skrzynka pocztowa rzeczywiście istnieje i akceptuje listy. Ale może usunąć celowo niepoprawne adresy.

Rozwiązanie Jak w każdym języku programowania, w PHPReguły walidacji adresów e-mail można zaimplementować na wiele różnych sposobów, a przykłady w tym artykule nie są ostateczną i jedyną opcją. Dlatego w każdym przypadku podajemy listę wymagań, które należy wziąć pod uwagę podczas programowania, a konkretna implementacja zależy wyłącznie od dewelopera.

Tak więc wyrażenie walidacji wiadomości e-mail powinno sprawdzać następujące warunki:

  1. Obecność symbolu @ w oryginalnym ciągu i brak spacji.
  2. Część adresu dotycząca domeny, po której następuje symbol @, zawiera tylko prawidłowe znaki dla nazw domen. To samo dotyczy nazwy użytkownika.
  3. Podczas weryfikacji nazwy użytkownika musiszwykryć obecność znaków specjalnych, takich jak apostrof lub pionowa kreska. Takie znaki są potencjalnie niebezpieczne i mogą zostać zawarte w atakach, takich jak wstrzyknięcie SQL. Unikaj takich adresów.
  4. Nazwy użytkowników akceptują tylko jedną kropkę, która nie może być pierwszym ani ostatnim znakiem w linii.
  5. Nazwa domeny musi zawierać co najmniej dwa i nie więcej niż sześć znaków.

Przykład uwzględniający wszystkie te warunki można zobaczyć na poniższym rysunku.

e-mail z wyrażeniami regularnymi php

Weryfikowanie adresów URL

Zadanie. Sprawdź, czy podany ciąg tekstowy jest prawidłowym adresem URL. Zwróć uwagę, że wyrażenia regularne walidacji adresów URL można zaimplementować na wiele sposobów.

Rozwiązanie Nasza ostateczna wersja wygląda tak:

/^(https?://)?((da-z.->+).((az.††···················· * / ?

Teraz przeanalizujmy bardziej szczegółowo jego składniki, korzystając z obrazu.

wyrażenia regularne w adresach URL

przedmiot 1Przed adresem URL nie może być żadnych znaków
pozycja 2Sprawdzanie obowiązkowego przedrostka „http”
pozycja 3Nie powinno być żadnych symboli
pozycja 4Jeśli występuje „s”, adres URL wskazuje bezpieczne połączenie „https”
s. 5Wymagany fragment "//"
pozycja 6Brak symboli
s. 7-9Sprawdzanie poprawności domeny pierwszego poziomu i obecności kropki
s.10-13Sprawdzanie pisowni domeny drugiego poziomu i kropki
s. 14-17

Struktura pliku adresu URL — zestaw cyfr, liter, podkreśleń, łączników, kropek i końcowego ukośnika

Sprawdzanie numerów kart kredytowych

Zadanie. Konieczne jest sprawdzenie poprawności wpisanego numeru karty plastikowej najpopularniejszych systemów płatności. Opcja jest rozważana tylko dla kart Visa i MasterCard.

Rozwiązanie Tworząc wyrażenie, musisz wziąć pod uwagęmożliwa obecność spacji we wpisanym numerze. Liczby na karcie są podzielone na grupy, co ułatwia czytanie i dyktowanie. Dlatego naturalne jest, że osoba próbuje wprowadzić liczbę w ten sposób (tzn. za pomocą spacji).

Napisz ogólne wyrażenie, które uwzględniamożliwe spacje i myślniki są trudniejsze niż po prostu usunięcie wszystkich znaków z wyjątkiem liczb. Dlatego zaleca się stosowanie w wyrażeniu metaznaku /D, który usuwa wszystkie znaki z wyjątkiem liczb.

Teraz możesz przejść bezpośrednio dosprawdzanie numeru. Wszystkie firmy obsługujące karty kredytowe używają unikalnego formatu numeru. Przykład korzysta z tego i klient nie musi wpisywać nazwy firmy - jest ona identyfikowana przez numer. Karty Visa zawsze zaczynają się od 4 i mają 13 lub 16 cyfr. MasterCard zaczyna się w zakresie 51-55 o długości liczby 16. W rezultacie otrzymujemy następujące wyrażenie:

przykłady wyrażeń regularnych

Przed przetworzeniem zamówienia możesz dodatkowo sprawdzić ostatnią cyfrę liczby, która jest obliczana za pomocą algorytmu Luna.

Sprawdzam numery telefonów

Zadanie. Sprawdzenie poprawności wpisanego numeru telefonu.

Rozwiązanie Liczba cyfr w telefonach stacjonarnych i komórkowychNumery telefonów różnią się znacznie w zależności od kraju, dlatego niemożliwe jest uniwersalne sprawdzenie numeru telefonu za pomocą wyrażeń regularnych pod kątem poprawności. Ale numery międzynarodowe mają ścisły format i świetnie nadają się do sprawdzania wzorców. Co więcej, coraz więcej krajowych operatorów telefonicznych stara się przestrzegać jednego standardu. Struktura emisji jest następująca:

+ CCC.NNNNNNNNNNxEEEE, gdzie:

- C to 1-3-cyfrowy kod kraju.

- N - liczba do 14 cyfr.

- E to opcjonalne rozszerzenie.

Plus jest wymagany, a x występuje tylko wtedy, gdy wymagane jest rozszerzenie.

W rezultacie otrzymujemy następujące wyrażenie:

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

Liczby w zakresie

Zadanie. Musisz upewnić się, że pasuje liczba całkowita z określonego zakresu. Dodatkowo wymagane jest, aby wyrażenia regularne znajdowały tylko liczby z zakresu wartości.

Rozwiązanie. Oto kilka wyrażeń dla kilku najczęstszych przypadków:

Określ godzinę od 1 do 24^ (1 [0-2] | [1-9]) $
Dzień w miesiącu 1-31^ (3 [01] | [12] [0-9] | [1-9]) $
Sekunda lub minuta 0-59^ [1-5]? [0-9] $
Liczba 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]?) $

Znajdowanie adresu IP

Zadanie. Musisz określić, czy podany ciąg jest prawidłowym adresem IPv4 z zakresu 000.000.000.000-255.255.255.255.

Rozwiązanie Jak każde zadanie w PHP, wyrażenie regularne ma wiele odmian. Na przykład to:

spacja wyrażeń regularnych

Kontrola wyrażeń online

wyrażenie regularne e-mail

Sprawdzanie poprawności wyrażeń regularnych dlaPoczątkujący programiści mogą stanowić wyzwanie 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 testerów wyrażeń online, które pozwalają w łatwy sposób sprawdzić poprawność utworzonego szablonu na rzeczywistym tekście. Programista wprowadza wyrażenie i dane do weryfikacji i natychmiast widzi wynik przetwarzania. Zwykle istnieje również sekcja referencyjna, która szczegółowo opisuje wyrażenia regularne, przykłady i różnice w implementacji dla najpopularniejszych języków programowania.

Ale całkowicie zaufaj wynikom usług onlinenie zalecane dla wszystkich programistów PHP. Wyrażenie regularne, napisane i przetestowane osobiście, jest aktualne i gwarantuje brak błędów.

Podobało mi się:
0
Popularne posty
Duchowy rozwój
Jedzenie
tak