Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne na hasło
Forum PHP.pl > Forum > PHP
beel
Witam,
znalazłem w sieci taki ciąg wyrażenia regularnego:
  1. 'A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{6,}z'

Sprawdzam w ten sposób:
  1. if (preg_match('A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{6,}z', $pass))
  2. {
  3. print 'Jest ok!';
  4. }

Zgodnie z opisem:
Cytat
Dzięki temu wyrażeniu regularnemu można kontrolowac poprawność wprowadzonego hasła. Ten przykład sprawdza czy hasło ma conajmniej 6 znaków długości oraz czy zawiera jedną dużą literę, jedną małą oraz cyfrę.

Jednak moim zdaniem jest to niepoprawne wyrażenie. Pomoże ktoś je naprawić do postaci z opisu?
Methestel
Nie sprawdzaj wszystkiego na raz.

Napisz sobie funkje które sprawdzają po jednej rzeczy:
- czy długość jest odpowiednia (zwracam od razu uwagę, że jeśli masz kodowanie ustawione na UTF-8 i dopuszczasz polskie znaki w haśle to zwykłe strlen() nie wystarczy, musisz wcześniej potraktować hasło funkcją utf8_decode())
- czy jest przynajmniej jedna duża litera
- czy jest przynajmniej jedna cyfra

Oprócz tego że takie funkcje są znacznie prostrze do napisania to Twój kod będzie też bardziej czytelny.
gargamel
Napisałem funkcję która mi waliduje wprowadzone hasło, a wygląda ona tak:

  1. private function ValidatePassword($password){
  2. $conditions = array
  3. (
  4. '/[A-Z]+/', // Spr czy hasło zawiera co najmniej jedną wielką literę
  5. '/[0-9]+/', // Spr czy hasło zawiera co najmniej jedną cyfrę
  6. '/[\`\~\!\@\#\$\%\^\&\*\(\)\-\_\=\+\[\{\]\}\|\\\;\:\'\"\,\<\.\>\/\?]+/', // Spr czy hasło zawiera co najmniej jeden znak specjalny
  7. '/^[^\s]{8,32}$/D' // Spr czy hasło nie zawiera białych znaków i zawiera od 8 do 32 znaków
  8. );
  9.  
  10. foreach($conditions as $condition){
  11. if( !preg_match( $condition, $password ) ){
  12. return false;
  13. }
  14. }
  15. return true;
  16. }


Można to jeszcze wzbogacić o sprawdzanie czy nie zawiera / czy zawiera polskie znaki. Coś z tego na pewno ustrugasz.
beel
Taka postać mnie zadowala:
  1. '#.*^(?=.{8,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$#'


smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.