Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzenie poprawności hasła
Forum PHP.pl > Forum > Przedszkole
raqqos
Jak sprawdzić hasło, które musi być 8 znakowe i zawierać co najmniej 2 cyfry?
Ja to zrobiłem tak:
  1. <?php
  2.  
  3.  
  4. function prawidlowe_haslo($haslo)
  5. {
  6. // sprawdzenie hasła
  7. if (strlen($haslo) > 8 || strlen($haslo) < 16)
  8. {
  9. $wyr = &#092;"^(([a-zA-Z-_]+)([0-9]{2}))$\";
  10. if (ereg($wyr, $haslo))
  11. {
  12. return true;
  13. }
  14. else
  15. {
  16. return 'Nie poprawny format hasła - musi zawierać co najmniej 2 cyfry!';
  17. }
  18. }
  19. else
  20. {
  21. return 'Nie poprawna długość hasła - musi mieć od 8 do 16 znaków!';
  22. }
  23.  
  24. ?>

ale jakoś nie chce zadziałać. Jest problem z wyr. regularnym. Ma ktoś pomysła?
crash
Zastosuj po prostu takie wyrażenie reg.: /[0-9]+.*[0-9]+/
sobstel
Cytat(raqqos @ 2005-07-07 23:15:39)
[0-9]{2}

jesli sie nie myle to ten fragment powoduje ze maja byc dokladnie 2 cyfry. na co najmniej 2 cyfry powinno byc raczej {2,}. niemniej jednak powyzsza propozycja ktora napisal crashu jest chyba lepszym i zgrabniejszym rozwiazaniem.
crash
Też myślałem z początku o zwykłym [0-9]{2,}, ale taki coś wymagałoby cyfr obo siebie.
sobstel
Cytat(crashu @ 2005-07-08 10:02:09)
Też myślałem z początku o zwykłym [0-9]{2,}, ale taki coś wymagałoby cyfr obo siebie.

koniec końców na bazie twojego przykladu zaproponowalbym cos takiego na sprawdzenie wszystkiego i pozbycie sie strlen

Kod
/^(\w*[0-9]+\w*[0-9]+\w*){8,16}$/


lub z zachowaniem strlen

Kod
/[0-9]+\w*[0-9]+/
raqu
Niestety, rozwiązanie ktore podaliscie nie dziala.
robie tak:
  1. <?php
  2.  
  3.  
  4. function prawid_haslo($haslo)
  5. {
  6. $wyr = &#092;"^(w*[0-9]+w*[0-9]+w*){8,16}$\";
  7. $wyr1 = &#092;"^([0-9]+w*[0-9]+)$\";
  8. if (ereg($wyr, $haslo))
  9. return true;
  10. else
  11. return false;
  12. }
  13.  
  14. ?>

Jak widać probowałem obydwu metod. Wpisywalem cyfry na poczatku, w srodku i na koncu hasla no i lipa. Macie jakis inny pomysl? Piszcie ludzie!
sobstel
Cytat(raqu @ 2005-07-25 09:00:30)
$wyr1 = "^([0-9]+\w*[0-9]+)$";

sprobuj bez znakow ^ i $
raqu
Cytat
sopel  napisano 2005-07-25 09:18:08
 
QUOTE (raqu @ 2005-07-25 09:00:30)
$wyr1 = "^([0-9]+\w*[0-9]+)$";

sprobuj bez znakow ^ i $
Spróbowalem. Cześciowo działa. tzn:jescli cyfry sa obok siebie to jest ok. w srodku, na poczatku czy na koncu. Ale jesli ktos zechce ustawic sobie haslo pomiedzy dwiema cyframi lub cos w tym stylu to nie zadziala.

//EDYCJA
Dobra, koncze z wyrazeniami regularnymi. dry.gif
Zrobilem to funkcją:
  1. <?php
  2.  
  3. function prawid_haslo($haslo)
  4. {
  5. $j = 0;
  6. $dlugosc = strlen($haslo);
  7. for($i=0; $i<$dlugosc; $i++)
  8. {
  9. $tab[$i]=substr($haslo, $i, 1);
  10. if (is_numeric($tab[$i]))
  11. $j++;
  12. }
  13. if ($j >= 2)
  14. return true;
  15. else
  16. return false;
  17. }
  18.  
  19. ?>

Szkoda tylko ze wczesniej na to nie wpadlem. tongue.gif
8_pasazer_NOSTROMO
Witam, podepnę się pod temat.

Hasło musi zawierać minimum 10 znaków w tym :
- duże litery
- małe litery
- cyfry
- znaki specjalne (@#!+-%)

Pomoże ktoś.
Pyton_000
wstaw po prostu 5 if-ów i nie kombinuj.
vokiel
Cytat(8_pasazer_NOSTROMO @ 27.04.2020, 11:28:12 ) *
Witam, podepnę się pod temat.

Hasło musi zawierać minimum 10 znaków w tym :
- duże litery
- małe litery
- cyfry
- znaki specjalne (@#!+-%)

Pomoże ktoś.


W takim przypadku trzeba to połączyć w grupy, np:
Kod
(?=(.*[a-z]))(?=(.*[A-Z]))(?=(.*\d))(?=(.*[@#\+\-\%]))


https://regex101.com/r/FdFHSD/1
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.