czwartek, 12 grudnia 2013

Walidacja haseł przy użyciu wyrażeń regularnych

Jeśli jesteś web-developerem to na pewno w swojej karierze piasłeś różnego rodzaju panele logowania (być może nawet oparte na implementacjach OpenID). Najprawdopodobniej również używałeś różnego rodzaju wyrażeń regularnych do sprawdzania poprawności wprowadzanych danych. Ciekawym sposobem na walidację wprowadzanych haseł podczas rejestracji użytkowników może być zastosowanie właśnie wyrażeń regularnych. Generalnie typy wyrażeń możemy podzielić na POSIXowe oraz PERLowe. Do realizacji tego zadania musimy użyć wyrażeń typu PERLowego, gdyż te drugie nie obsługują wzorców "Lookingahead" i "Lookingbehind". Inaczej można je nazwać asercjami o zerowej długości. Co to oznacza? To, że możemy przy ich pomocy spasować jakiś wzorzec bez włączania wyników tej części wyrażenia do jego wyniku.

Dla przykładu podam tutaj wyrażenie, które wpasowuje wzorzec tekstu zawierające w treści słowo "parapet", w taki sposób, że do wyniku działania wyrażenia zostanie zwrócony jedynie fragment "para".

/para(?=pet)/
Używając tej techniki możemy sprawdzić czy np. podane przez użytkownika hasło składa się z co najmniej 12 znaków. Do dodatkowej walidacji będę opakowywał wyrażenie w ^$ aby zapewnić, że wyrażenie działa od początku do końca wprowadzonej wartości.

/^(?=.{12,})$/

Aby dopasować jedynie wartości, które składają się minimum z dowolnych 8 znaków a maksymalnie z 50 znaków musimy użyć:
/^(?=.{12,50})$/
W celu ograniczenia dopasowania do wartości, które zawierają co najmniej 1 znak specjalny lub cyfrę najpierw musimy używając Lookahead dopasować litery (dowolną ich liczbę czyli ".*"):

/^(?=.{12,50})(?=.*[a-zA-Z])$/

Następnie możemy dodać ciąg znaków odpowiedzialny za dopasowanie co najmniej 1 cyfry lub znaku specjalnego:
 /^(?=.{12,50})(?=.*[a-zA-Z])(.*[0-9-+_$!@#%&^*?.,]){1,}.$/
 

Artykuł udostępniany na licencji CC-BY-SA-3.0

Brak komentarzy:

Prześlij komentarz