Wyrażenia regularne do walidacji danych — gotowe wzorce regex
Walidacja danych to jeden z fundamentów bezpiecznych i niezawodnych aplikacji. Wyrażenia regularne są najszybszym sposobem sprawdzenia, czy dane wejściowe mają prawidłowy format — zanim trafią do bazy danych lub zostaną przetworzone przez serwer. W tym artykule zebraliśmy gotowe, przetestowane wzorce regex dla polskich formatów danych: numery PESEL, NIP, REGON, kody pocztowe, numery telefonów i adresy email. Każdy wzorzec możesz przetestować bezpośrednio w narzędziu Tester Regex na WikiPlus.
Regex dla polskich danych identyfikacyjnych
Polska ma kilka unikatowych formatów numerów identyfikacyjnych, każdy z własnymi regułami. PESEL: `^[0-9]{11}$` — 11 cyfr. Bardziej szczegółowy wzorzec uwzględniający datę urodzenia: `^[0-9]{2}(0[1-9]|1[0-2]|2[1-9]|3[0-2]|[4-9][0-9])(0[1-9]|[1-2][0-9]|3[0-1])[0-9]{4}[0-9]$`. NIP: `^[0-9]{3}[0-9]{3}[0-9]{2}[0-9]{2}$` lub z separatorami: `^[0-9]{3}[-]?[0-9]{3}[-]?[0-9]{2}[-]?[0-9]{2}$`. REGON: `^[0-9]{9}$` dla podmiotów fizycznych lub `^[0-9]{14}$` dla jednostek. KRS: `^[0-9]{10}$`. Pamiętaj, że regex sprawdza tylko format — pełna walidacja PESEL i NIP wymaga sprawdzenia cyfry kontrolnej algorytmem, którego regex nie może zastąpić.
Walidacja emaila i URL — wzorce regex
Email to jeden z najtrudniejszych do walidacji regex formatów — specyfikacja RFC 5321 jest bardzo rozległa. Prosty wzorzec, który wystarczy w praktyce: `^[^\s@]+@[^\s@]+\.[^\s@]+$`. Bardziej szczegółowy: `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`. Pamiętaj, że jedyną pewną walidacją emaila jest wysłanie wiadomości potwierdzającej. Dla URL: `^(https?:\/\/)([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$` — sprawdza podstawową strukturę URL z protokołem HTTP(S). Dla domen polskich z .pl: `^[a-z0-9-]+(\.[a-z0-9-]+)*\.pl$`. IBAN (polski): `^PL[0-9]{26}$` lub z spacjami: `^PL[0-9]{2}\s?([0-9]{4}\s?){6}$`.
Regex dla numerów telefonów — polskie i międzynarodowe formaty
Numery telefonów to pole minowe dla walidacji, bo użytkownicy wpisują je w dziesiątkach formatów. Dla polskich numerów stacjonarnych i komórkowych: `^(\+48)?[\s-]?([0-9]{3}[\s-]?){2}[0-9]{3}$` — obsługuje formaty jak 500 100 200, +48 500-100-200, 500100200. Dla numeru w formacie E.164 (międzynarodowy standard): `^\+[1-9]\d{1,14}$`. Jeśli chcesz być elastyczny z separatorami: `^[+]?[(]?[0-9]{3}[)]?[-\s.]?[0-9]{3}[-\s.]?[0-9]{4,6}$`. Wskazówka praktyczna: zamiast próbować obsłużyć wszystkie możliwe formaty telefonów globalnie w jednym regex, lepiej najpierw usunąć wszystkie znaki niebędące cyframi i plusem, a dopiero potem walidować długość i prefiks.
Zaawansowane wzorce regex — grupy i lookahead
Zaawansowane funkcje regex otwierają możliwości niedostępne prostymi wzorcami. Grupy przechwytujące () pozwalają wyodrębnić fragmenty dopasowania — `(\d{4})-(\d{2})-(\d{2})` dopasowuje datę ISO i przechwytuje rok, miesiąc i dzień osobno. Grupy nieprzechwytujące (?:) grupują bez zapamiętywania — optymalizacja pamięci. Lookahead (?=...) sprawdza, co następuje po dopasowaniu, bez konsumowania znaków — `\w+(?=\s+podatek)` znajdzie słowo przed " podatek". Negative lookahead (?!...) to negacja lookahead. Lookbehind (?<=...) sprawdza co poprzedza. Named groups (?<name>...) nadają grupom nazwy dla czytelności kodu. Wzorzec walidacji hasła z co najmniej jedną cyfrą i literą: `^(?=.*[A-Za-z])(?=.*\d).{8,}$`.
Często zadawane pytania
- Jak walidować PESEL za pomocą regex?
- Regex `^[0-9]{11}$` sprawdza tylko format (11 cyfr). Prawdziwa walidacja PESEL wymaga sprawdzenia cyfry kontrolnej: pomnóż kolejne cyfry przez wagi [1,3,7,9,1,3,7,9,1,3], zsumuj modulo 10, ostatnia cyfra powinna być równa (10 - suma) % 10. Samego formatu regex nie wystarczy — możesz sprawdzić cyfrę kontrolną w narzędziu lub w kodzie.
- Czy regex może walidować JSON lub XML?
- Regex nie nadaje się do walidacji języków z zagnieżdżonymi strukturami jak JSON czy XML — te wymagają parserów ze stosem. Regex może jedynie sprawdzić proste wzorce w ciągach. Do walidacji JSON użyj JSON.parse(), do XML — parsera DOM lub SAX.
- Jak zoptymalizować powolny regex?
- Unikaj catastrophic backtracking — wzorców jak (a+)+ na długich ciągach. Używaj kotwic ^ i $ gdy to możliwe. Preferuj konkrety nad `.` (np. [0-9] zamiast . dla cyfr). Rozważ atomic groups lub possessive quantifiers w językach, które je obsługują. Przetestuj wydajność na pesymistycznych danych wejściowych.