Będę tu wstawiał i aktualizował wyrażenia regularne, których zdarza mi się używać.
Walidacja maila
To chyba najczęściej sprawdzany wyrażeniem regularnym łańcuch znaków 🙂
$email = 'sprawdz.mnie@domena.pl';
| to znak, który rozpocznie i zakończy wyrażenie regularne
if(preg_match("|^[a-z0-9]([._-]?[a-z0-9]+)*@[a-z0-9]+([-.]?[a-z0-9]+)*\.[a-z]{2,4}$|e",$email)) {
echo 'Ten e-mail jest ok';
} else {
echo 'Nieprawidłowy e-mail';
}
^ oznacza początek wiersza
a-z i 0-9 są chyba oczywiste
[._-]? oznacza opcjonalne wystąpienie jednego ze znaków z nawiasów kwadratowych
+ co najmniej jedno wystąpienie danego znaku/grupy znaków/wzorca
\. to kropka (sama kropka oznacza 1 dowolny znak)
{2,4} co najmniej 2 i co najwyżej 4 wystąpienia
$ koniec łańcucha znaków
e po znaku zamykającym wzorzec oznacza ignorowanie wielkości liter
Ograniczenie długości słowa
do (np:) 24 znaków. Przydaje się jeśli zależy nam, aby użytkownik w np: formularzu nie mógł przekazać czegoś taaaaaaaaaaaaaakkkkkkkkkkiiiiiieeeeeeggggoooooooooo, przez co może się nam rozlecieć layout (jeśli zapomnieliśmy w CSS o overflow) a już na pewno nie wygląda elegancko.
$string = 'Jakiś tam łańcuch znaków';
Czyli co najmniej 24 znaki nie będące znakiem białym (np: nowy wiersz, odstęp). \b oznacza kraniec słowa.
if(preg_match('|(\b\S{24,}\b)|',$string)) {
echo 'Za długie długie słowo, zapomniałeś do czego jest spacja?';
} else {
echo 'ok';
}
Czy podana wartość jest wartością całkowitą (integer’em)
Pewnego pięknego wieczoru miałem potrzebę sprawdzić czy przekazana w formularzu wartość jest liczbą całkowitą dodatnią nie dłuższą niż N znaków. Okazało się, że rzecz nie jest banalna, ponieważ dostępnymi funkcjami php nie da się tego sprawdzić (is_int oraz is_numeric nie daje rady). Spłodziłem więc coś takiego:
if(!preg_match("|^[1-9][0-9]{0,7}$|",$zmienna)) echo 'To nie jest integer większy od 0';
Sprawdzamy czy pierwszy znak to cyfra od 1 do 9 oraz czy następne znaki (maksymalnie siedem) to cyfry od 0 do 9. Zamiast 0-9 można użyć klasy pre definiowanej digit:preg_match("|^[1-9][[:digit:]]{0,7}$|",$zmienna)