Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Sprawdzanie hasła pod względem wpisanych znaków
JamalBIG
post 8.01.2013, 15:12:32
Post #1





Grupa: Zarejestrowani
Postów: 496
Pomógł: 1
Dołączył: 16.01.2008
Skąd: Świnoujście

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


Witam

W jaki sposób mogę sprawdzić czy podane hasło w polu tekstowym zawiera duże i małe litery, cyfry i znaki specjalne? (znalazłem wiele podpowiedzi ale z użytą funkcją 'ereg' a nie potrafię przekształcić jej na preg_match)

  1. if (ereg('[0-9]', 'tu jest liczba 5')) {
  2. echo "tak";
  3. }


  1. if (ereg('[A-Z]', 'tu jest duza litera D')) {
  2. echo "tak";
  3. }
Go to the top of the page
+Quote Post
_Borys_
post 8.01.2013, 16:46:53
Post #2





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


Prosty przykład na sprawdzenie czy duże i małe litery oraz cyfry i _ oraz -
ilość znaków w haśle min 6, max 40, niektóre znaki specjalne wymagają backslash-a przed sobą

  1. $haslo = 'acbABc23_-';
  2. if (preg_match('/^([a-zA-Z0-9_-]{6,40})$/D',$haslo)){
  3. echo 'OK';
  4. }
  5. else {
  6. echo 'NOT OK';
  7. }


Tu fajnie wytłumaczone wyrażenia regularne:

Wyrażenia regularne PCRE w PHP Tutorial

Ten post edytował _Borys_ 8.01.2013, 16:50:20
Go to the top of the page
+Quote Post
JamalBIG
post 8.01.2013, 21:04:47
Post #3





Grupa: Zarejestrowani
Postów: 496
Pomógł: 1
Dołączył: 16.01.2008
Skąd: Świnoujście

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


Dzięki wielkie za odpowiedź ale nie do końca funkcjonuje ten kod, kiedy podaje
  1. $haslo = '1234_-';

pokazuje również ok a chodzi o to aby były spełnione wszystkie kryteria czyli: duże litery, małe litery, cyfry i znaki specjalne;
Go to the top of the page
+Quote Post
_Borys_
post 8.01.2013, 23:16:18
Post #4





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


do tego służą kwantyfikatory

+ - conajmniej raz
* - zero lub dowolną ilość razy
? - zero lub jeden raz

Przykład, conajmniej jedna mała litera, conajmniej jedna duża litera, conajmniej jedna cyfra i conajmniej jeden z tych dwóch znaków specjalnych

Kod
'/^([a-z]+[A-Z]+[0-9]+[_-]+)$/D'
Go to the top of the page
+Quote Post
b4rt3kk
post 9.01.2013, 00:52:55
Post #5





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(_Borys_ @ 8.01.2013, 16:46:53 ) *
Prosty przykład na sprawdzenie czy duże i małe litery oraz cyfry i _ oraz -
ilość znaków w haśle min 6, max 40, niektóre znaki specjalne wymagają backslash-a przed sobą

  1. $haslo = 'acbABc23_-';
  2. if (preg_match('/^([a-zA-Z0-9_-]{6,40})$/D',$haslo)){
  3. echo 'OK';
  4. }
  5. else {
  6. echo 'NOT OK';
  7. }


Tu fajnie wytłumaczone wyrażenia regularne:

Wyrażenia regularne PCRE w PHP Tutorial


To co napisałeś nie spowoduje, że przejdzie jedynie ciąg znaków zawierający małe, duże litery, liczby i parę znaków, ale wszystkie ciągi zawierające się w tym przedziale. Równie dobrze mogę wpisać hasło 'aaaaaaa' lub '-------', a chyba nie o to koledze chodziło?


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
-Gość-
post 9.01.2013, 01:10:10
Post #6





Goście







Cytat(_Borys_ @ 8.01.2013, 23:16:18 ) *
do tego służą kwantyfikatory

+ - conajmniej raz
* - zero lub dowolną ilość razy
? - zero lub jeden raz

Przykład, conajmniej jedna mała litera, conajmniej jedna duża litera, conajmniej jedna cyfra i conajmniej jeden z tych dwóch znaków specjalnych

Kod
'/^([a-z]+[A-Z]+[0-9]+[_-]+)$/D'


Też źle, przy takim wyrażeniu zakładasz konkretną kolejność znaków, nie pasuje do wzorca np. Az-1. A tak przy okazji pisze się: co najmniej (osobno)

Propozycja: zamienić dozwolone znaki na wartości puste, jeśli coś zostanie, to znaczy, że napis jest nieprawidłowy
Go to the top of the page
+Quote Post
-Gość-
post 9.01.2013, 01:19:02
Post #7





Goście







Nie mogę edytować, a konta nie chce mi się zakładać. Jednak propozycja jest zła, bo nie uwzględni, że znaki muszą wystąpić. Chyba nie obejdzie się bez sprawdzania kilku warunków
Go to the top of the page
+Quote Post
mokry
post 9.01.2013, 01:28:25
Post #8





Grupa: Zarejestrowani
Postów: 374
Pomógł: 23
Dołączył: 3.06.2006
Skąd: Katowice

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


tu masz regexpa, który być może Cię zadowoli:
Kod
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$


Warunki:
- przynajmniej jedna wielka litera
- przynajmniej jedna mała litera
- przynajmniej jedna cyfra lub inny znak specjalny
- długość minimum 8 znaków


--------------------
Pomogłem? Podziękuj proszę klikając poniżej "POMÓGŁ" ;)
Go to the top of the page
+Quote Post
JamalBIG
post 9.01.2013, 10:54:50
Post #9





Grupa: Zarejestrowani
Postów: 496
Pomógł: 1
Dołączył: 16.01.2008
Skąd: Świnoujście

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


Dzięki za odpowiedzi ale poniższy skrypt nie chce zadziałać:
  1. if (preg_match("(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$", '123abcABC')) echo "OK"; else echo "NIE";
Go to the top of the page
+Quote Post
mokry
post 9.01.2013, 11:50:51
Post #10





Grupa: Zarejestrowani
Postów: 374
Pomógł: 23
Dołączył: 3.06.2006
Skąd: Katowice

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


  1. $haslo = '12cABC';
  2.  
  3. if (preg_match('/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/', $haslo))
  4. {
  5. echo "OK";
  6. }
  7. else
  8. {
  9. echo "NIE";
  10. }


--------------------
Pomogłem? Podziękuj proszę klikając poniżej "POMÓGŁ" ;)
Go to the top of the page
+Quote Post
b4rt3kk
post 9.01.2013, 13:03:19
Post #11





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(JamalBIG @ 9.01.2013, 10:54:50 ) *
Dzięki za odpowiedzi ale poniższy skrypt nie chce zadziałać:
  1. if (preg_match("(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$", '123abcABC')) echo "OK"; else echo "NIE";


Obawiam się, że jednym wyrażeniem regularnym nie załatwisz całości, nie po to one są. Nie ma nawet takiego operatora jak AND, który byłby tu pomocny.

  1. $password = "sdaSD!s";
  2.  
  3. if (preg_match('/[A-Z]/', $password)) echo 'zawiera duże litery<br/>'; else echo 'nie zawiera dużych liter<br/>';
  4. if (preg_match('/[0-9]/', $password)) echo 'zawiera cyfry<br/>'; else echo 'nie zawiera cyfr<br/>';
  5. if (preg_match('/[\!\@\#\$\%\^\&\*]/', $password)) echo 'zawiera znaki specjalne<br/>'; else echo 'nie zawiera znaków specjalnych<br/>';


Ten post edytował b4rt3kk 9.01.2013, 13:03:49


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
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: 26.04.2025 - 00:37