Jak zweryfikować czy ciąg znaków Unicode zawiera tylko litery i liczby?
Treść dodana: 16 stycznia 2016.
Istnieje wiele przypadków w których zachodzi konieczność sprawdzenia, czy ciąg wejściowy zawiera tylko litery alfabetu i liczby. W szczególności mowa o zadaniach takich jak filtracja i walidacja. Najczęściej sprawdzane są dane typu imię, nazwisko, nazwa ulicy czy też miejscowość. Zazwyczaj w takich momentach posługujemy się funkcjami wyrażeń regularnych np. preg_match. O ile sprawdzenie znaków z podstawowego zakresu [a-z] nie stanowi żadnego problemu, o tyle już znaki narodowe są pewnym wyzwaniem. Najczęściej spotykanym wzorcem dla polskiego alfabetu jest wtedy wyrażenie:
<?php $in = 'Łucja Świątek-Gżegżółka'; $pattern = '/^[a-ząśżźćłóęńĄŚŻŹĆŁÓĘŃ -]+$/ui'; preg_match($pattern, $in, $out); var_dump($out);
Modyfikator u każe traktować wzorzec oraz ciąg wejściowy jako znaki UTF-8, z kolei i bierze pod uwagę małe oraz wielkie litery.
Problem powstanie jeżeli osoba chcąca się zarejestrować jest przykładowo Niemką z polskim obywatelstwem. Łucja Müller-Gżegżółka nie będzie pasować do wzorca, stąd zapewne dział techniczny otrzyma maila z prośbą o wprowadzenie poprawek. Z pomocą przychodzą kategorie znaków które dość dobrze opisane są na stronie regular-expressions.info. Wszystkie znaki Unicode przypisane są do określonych grup, co bardzo ułatwia ich sprawdzanie. I tak, dwie podstawowe będące tematem artykułu, to:
\p{L} lub \p{Letter} - znak traktowany jako litera w dowolnym języku \p{N} lub \p{Number} - dowolny typ numeryczny
<?php $in = 'Łucja Müller-Gżegżółka'; $pattern = '/^[\p{L} -]+$/u'; preg_match($pattern, $in, $out); var_dump($out);
Do sprawdzenia ulicy z numerem domu możemy użyć wzorca:
$pattern = '/^[\p{L}\p{Nd} -]+$/u';
Lub po prostu:
$pattern = '/^[\p{L}0-9 -]+$/u';
Ponieważ wzorzec `\p{N}` zawiera w sobie także np. litery rzymskie (Ⅲ), ograniczyliśmy znaki za pomocą {Nd} do typowych cyfr od 0 do 9. Dzięki temu będziemy w stanie poprawnie zweryfikować takie dane jak:
$in = 'Jakobstraße 30a'; $in = 'Śmigłego-Rydza 13';
Dodaj komentarz
- sieć
- http
- apache
- ssl
- javascript
- php
- jquery
- ajax
- html
- pdo
- sql server
- spl
- composer
- css
- sql
- mysql
- postresql
- mongodb
- psr
- programowanie
- regex
Wyszukaj interesujące Cię słowa kluczowe pośród istniejących porad.
Komentarze
Nie ma jeszcze żadnych komentarzy do wyświetlenia. Może chcesz zostać pierwszą osobą która podzieli się swoją opinią?