Archiwum - May 2008

 
 

5 praktycznych wyrażen regularnych w PHP

Za każdym razem gdy przychodzi mi skorzystać z dobrodziejstwa jakim są wyrażenia regularne (które swoją drogą mogłyby się dorobić jakiegoś ogólnie uznawanego standardu), sięgam po gotowe i sprawdzone wzorce. Poniżej umieściłem kilka najczęściej używanych przeze mnie wyrażeń regularnych wraz z przykładowym kodem w PHP.

Adres email
Walidacja adresu email jest często spotykanym przykładem użycia wyrażeń regularnych. Adres email składa się z 3 podstawowych części:

  • nazwy użytkownika - za sprawdzenie tego elementu odpowiada ([0-9a-zA-Z]([-_.\w]*[0-9a-zA-Z_])*
  • symbolu @
  • oraz nazwy domeny - za sprawdzenie tego elementu odpowiada (([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})

Całość daje nam razem uproszczony adres email, którego poprawność możemy sprawdzić używając poniższego kodu:

$test_string = "przykladowy@email.tutaj.pl";
if (preg_match('/^([0-9a-zA-Z]([-_.\w]*[0-9a-zA-Z_])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$/', $test_string))
{
	echo 'OK';
}
else
{
	echo 'Failed';
}

Adres URL
Czyli format adresowania zasobów internetowych najczęściej kojarzony z adresami stron www. Adres ten możemy rozbić na następujące części:

  • rodzaj protokołu - (http|https|file)
  • opcjonalna nazwa użytkownika i hasło - (\w*:\w*@)?
  • nazwa hosta - [-\w.]+
  • opcjonalny numer portu - (:\d+)?
  • ścieżka dostępu - (/([\w/_.]*
  • zapytanie - (\?\S+)?

Poprawność URLa możemy sprawdza następujący kawałek kodu:

$test_string = "http://login:haslo@www.rogozinski.net:80/admin/test.php?action=edit&id=166";
if (preg_match("/^(http|https|file):\/\/(\w*:\w*@)?[-\w.]+(:\d+)?(\/([\w\-\.\/]*(\?\S+)?)?)?$/", $test_string))
{
	echo 'OK';
}
else
{
	echo 'Failed';
}

Adres IP

W wydaniu IPv4, są to cztery liczby od 0 do 255 oddzielone kropkami.

$test_string = "255.255.255.0";
if preg_match('/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/', $test_string))
{
	echo 'OK';
}
else
{
	echo 'Failed';
}

Data i godzina (w formacie 24H)

$string = '2007-02-15 03:15';
if (preg_match('/^([0-9]{4}-[0-9]{2}-[0-9]{2})\s((0{0,1}[0-9])|(1[0-9])|([2][0-4])):([0-5][0-9])$/', $string))
{
	echo 'OK';
}
else
{
	echo 'Failed';
}

Kod pocztowy

$test_string = '05-324';
if (preg_match('/^[0-9]{2}[-]([0-9]{3})?$/', $test_string))
{
	echo 'OK';
}
else
{
	echo 'Failed';
}

Wszystkie przykłady wyświetlają napis ‘OK’ w razie prawidłowego rozpoznania wzorca i ‘Failed’ w razie porażki.

Warto zobaczyć: