Pięć wyrażeń regularnych, które warto mieć pod ręką
Wyrażenia regularne wyglądają jak przypadkowy zbiór znaków, dopóki nie rozłoży się ich na części. Oto pięć wzorców z codziennej pracy, rozebranych po kawałku.
Wyrażenia regularne mają opinię nieczytelnych i po części słusznie. Ale to po prostu bardzo zwięzły język opisu wzorca w tekście — a kilka konstrukcji wraca w nich stale.
Alfabet na start
\d— cyfra,\s— biały znak,\w— litera, cyfra lub podkreślnik+— jeden lub więcej,*— zero lub więcej,?— opcjonalnie{3}— dokładnie trzy,{2,4}— od dwóch do czterech^— początek tekstu,$— koniec[...]— jeden ze znaków w nawiasie,(...)— grupa do zapamiętania
1. Polski numer telefonu
/^(\+48)?[\s-]?\d{3}[\s-]?\d{3}[\s-]?\d{3}$/
Czytamy od lewej: opcjonalny prefiks kraju, opcjonalna spacja lub myślnik, trzy cyfry, i tak trzy razy. Dzięki temu przejdzie zarówno +48 501 234 567, jak i 501234567.
2. Kod pocztowy
/^\d{2}-\d{3}$/
Dwie cyfry, myślnik, trzy cyfry — od początku do końca tekstu. Kotwice ^ i $ są tu kluczowe, bo bez nich wzorzec znalazłby kod gdziekolwiek w środku zdania.
3. Sprzątanie białych znaków
tekst.replace(/\s+/g, " ").trim();
Zamienia każdy ciąg spacji, tabulatorów i znaków nowej linii na jedną spację. Nieoceniona sztuczka przy tekstach wklejanych z Worda.
4. Wyciąganie adresów ze strony
/https?:\/\/[^\s"<>]+/g
Litery http, opcjonalne s, dwukropek z ukośnikami, a potem wszystko poza spacją, cudzysłowem i nawiasem ostrym — bo to one zwykle kończą adres w kodzie HTML.
5. E-mail — i dlaczego prosto wystarczy
/^[^@\s]+@[^@\s]+\.[^@\s]+$/
Coś, małpa, coś, kropka, coś. Wygląda naiwnie i takie właśnie ma być. Wzorzec zgodny z pełną specyfikacją adresu e-mail ma kilka tysięcy znaków i nadal nie odpowie na jedyne ważne pytanie: czy ta skrzynka istnieje.
Adres e-mail sprawdza się wysyłając na niego wiadomość, a nie wyrażeniem regularnym.
Dwie rady na koniec
Testuj na stronie regex101.com — rozkłada wzorzec na części i tłumaczy każdy fragment. Nauka idzie tam kilka razy szybciej niż metodą prób i błędów w kodzie.
Dopisz komentarz. Wzorzec, który dziś jest oczywisty, za trzy miesiące będzie zagadką. Jedna linijka wyjaśnienia nad nim oszczędza kwadrans zastanawiania się.
Komentarze (4)
-
Szymon
Zdanie o tym, że adres e-mail sprawdza się wysyłając wiadomość, powinno zakończyć wszystkie internetowe dyskusje o walidacji maili.
Odpowiedz -
Szymon
Zdanie o tym, że adres e-mail sprawdza się wysyłając wiadomość, powinno zakończyć wszystkie internetowe dyskusje o walidacji maili.
Odpowiedz -
Weronika
Regex101 to była dla mnie rewolucja. Wcześniej klepałam wzorce na ślepo i modliłam się, żeby zadziałały.
Odpowiedz