Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrażenie regularne na hasło
beel
post 29.05.2011, 08:40:01
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 20.04.2007

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Methestel
post 29.05.2011, 12:53:07
Post #2





Grupa: Zarejestrowani
Postów: 46
Pomógł: 10
Dołączył: 30.06.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
gargamel
post 29.05.2011, 13:28:05
Post #3





Grupa: Zarejestrowani
Postów: 278
Pomógł: 35
Dołączył: 25.06.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował gargamel 29.05.2011, 13:34:39
Go to the top of the page
+Quote Post
beel
post 29.05.2011, 13:47:04
Post #4





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 20.04.2007

Ostrzeżenie: (0%)
-----


Taka postać mnie zadowala:
  1. '#.*^(?=.{8,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$#'


smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:28