• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Właściwa konstrukcja funkcji preg_match. Wymóg hasła

Object Storage Arubacloud
0 głosów
193 wizyt
pytanie zadane 29 grudnia 2018 w PHP przez xxkondzioxx15 Obywatel (1,440 p.)

Witam, tworzę wymogi hasła w formularzu rejestracji.

Chciałbym aby w haśle były następujące wymogi: 

* minimum 1 duża litera
* minimum 1 cyfra, tak aby nie musiały być one obok siebie(kolejność nie ma znaczenia)
* minimum jeden znak specjalny (./;',!@#$%^& itd.)
*długość hasła od 6 do  30 znaków

Zrobiłem coś takiego:

function check_pass($password1) {
    if(preg_match('/^(?=.*[A-Z])(?=.*\d)(?=[^a-zA-Z\d])\w{6,30}$/', $password1)){
        return true;
    }
    else{
        return false;
    }

if (!check_pass($password1)) 
{
	echo " Źle!"; 
    exit();
}

Niestety to nie działa, bo jak wpiszę np. Testowo1. to dalej mówi że jest źle. Próbowałem jeszcze coś takiego, ale to także nie działa:

function check_pass($password1) {
    if(preg_match('/^(?=.*[A-Z])(?=.*\d)(?=.*[$%^&])\w{6,30}$/', $password1)){
        return true;
    }
    else{
        return false;
    }

Co mam nie tak w funkcji wymogu? Bardzo mi na tym zależy więc proszę o pomoc. Pozdrawiam! Będę wdzięczny za każdą wskazówkę.

komentarz 29 grudnia 2018 przez PolYGlok Pasjonat (19,450 p.)
Co mówi że jest źle?
komentarz 29 grudnia 2018 przez xxkondzioxx15 Obywatel (1,440 p.)
Wywołuje to: echo " Źle!";

1 odpowiedź

+1 głos
odpowiedź 29 grudnia 2018 przez Tomek Sochacki Ekspert (227,510 p.)
W pierwszym regexp problemem jest ostatni warunek: \w{6,30}

w którym deklarujesz, że w ciągu mogą być jedynie znaki zawarte w \w, a jednocześnie wymagasz wcześniej znaku z poza tego zakresu (znaku specjalnego jak to nazywasz), czyli de facto robisz dwa kryteria, wzajemnie się wykluczające :)

W drugim przypadku niedziała z tego samego powodu :)

na końcu zamiast \w umieść znaki, które dopuszczasz jako prawidłowe dla całego ciągu i powinno być oki.
komentarz 29 grudnia 2018 przez xxkondzioxx15 Obywatel (1,440 p.)

Czy napiszesz mi tego przykład bo nie rozumiem tego. Czy liczbę znaków mam zastąpić w ten sposób?

if ((strlen($password1) < 6) || (strlen($password1) > 30)) {
echo "Password must be between 6 to 30 characters!";
exit();                                  
}

 

1
komentarz 29 grudnia 2018 przez Tomek Sochacki Ekspert (227,510 p.)

nie mam teraz na mobilce za bardzo jak testować, ale spróbuj tak:

/^(?=.*[A-Z])(?=.*\d)(?=.*[$%^&])[\w$%^&]{6,30}$/

tylko pamiętaj, że \w obejmuje też znak "_", jeśli ma go nie być to w miejsce \w daj A-Za-z\d.

Przetestuj i daj znać czy działa, jak nie to odezwij się jutro to na PC coś pomyślę.

komentarz 30 grudnia 2018 przez xxkondzioxx15 Obywatel (1,440 p.)
Nie działa ta konstrukcja co napisałeś, dalej pokazuje błąd
komentarz 30 grudnia 2018 przez xxkondzioxx15 Obywatel (1,440 p.)
Rozwiązałem to tak: '/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{6,30}.*$/'

Dziękuję za wszelką pomoc
komentarz 30 grudnia 2018 przez xxkondzioxx15 Obywatel (1,440 p.)
Poprawka, tak: '/^(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z\d]).*$/'

Podobne pytania

0 głosów
2 odpowiedzi 1,269 wizyt
pytanie zadane 13 maja 2018 w JavaScript przez shizeerr Początkujący (260 p.)
+2 głosów
1 odpowiedź 189 wizyt
pytanie zadane 9 grudnia 2021 w PHP przez CSSoup Mądrala (6,460 p.)
0 głosów
1 odpowiedź 268 wizyt
pytanie zadane 24 kwietnia 2018 w PHP przez Browarnik123 Użytkownik (830 p.)

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...