Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Blokada pewnych znaków w haśle
Forum PHP.pl > Forum > Przedszkole
Asig
Witam!

Mam problem z zablokowaniem niedozwolonych znaków w haśle.
Chcę aby użytkownik ustawiał bezpieczne hasło, tzn. z małych liter, dużych liter, cyfr, znaków specjalnych.
I żeby zablokować niedozwolone znaki, typu polskie znaki, ( ) ' " - itd.

Pierwszą połowę bez problemu zrobiłem, lecz z drugą połową (blokada niedozwolonych znaków) nie mogę sobie poradzić, ponieważ nie wiem jakie dokładnie znaki muszę blokować (przecież jest ich setki w różnych językach) i nie wiem za bardzo jak to napisać.

Skrypt wygląda tak:
  1. <?php
  2. $password = "sa%sds3";
  3.  
  4. if(preg_match('/[a-z]/', $password) AND preg_match('/[A-Z]/', $password) AND preg_match('/[0-9]/', $password) AND preg_match('/[\!\@\#\$\%\^\&\*]/', $password)) {
  5. echo'Twoje hasło zawiera małe litery, duże litery, cyfry i znaki specjalne.';
  6. } else {
  7. echo'Błąd!';
  8. }
  9. ?>


Proszę o pomoc.
Pozdrawiam!
Pyton_000
usuń preg_replace wszystkie znaki na które pozwalasz i porównaj dł. jeżeli > 0 to błąd
Asig
Przepraszam, ale nie rozumiem.
Przeczytałem twój post 20x i nie rozumiem o co chodzi...
viking
Tłumaczenie : masz sprawdzić czy ciąg zawiera jakieś znaki na które nie pozwalasz.
Pyton_000
@up nie, bo tych znaków jest więcej niż dozwolonych smile.gif

Masz zrobić odwrotnie np:
  1. preg_replace('[a-zA-Z0-9]','',$haslo);

Jeżeli po wykonaniu tego strlen > 0 to znaczy że masz niedozwolone znaki (poza literami i cyframi). Dodaj do tego znaki na które zezwalasz i tyle.
viking
Właśnie to napisałem smile.gif Ciąg, czyli ten po przepuszczeniu przez preg_replace. Mam temperaturę, chyba niejasno piszę.
Inna sprawa że to nie ma sensu. Ciąg od użytkownika wrzuć do http://pl1.php.net/manual/en/function.password-hash.php i sprawdzaj cały zamiast wymuszać konkretne znaki.
Asig
No nie chce mi to coś działać :/
  1. $password = "sasds3";
  2. if(strlen(preg_replace('[a-zA-Z0-9]', '', $password)) > 0) {
  3. echo'1';
  4. } else {
  5. echo'2';
  6. }

Zawsze jest odpowiedź 1 czy dodam jakieś znaki specjalne czy nie.
viking
  1. $password = "sasds3-";
  2. var_dump(preg_replace('/[a-zA-Z0-9]/', '', $password));
by_ikar
Są odpowiednie "klasy" znaków, jak przykładowo \W które oznacza przeciwieństwo \w. Można te wszystkie warunki zapisać w jednym wyrażeniu, w sumie dość nawet prostym. Pomysł z preg_replace uważam za totalnie chybiony.. Tak samo jak pomysł z kilkoma warunkami/wyrażeniami.. Moja propozycja: http://www.regexr.com/39oo3 w ostatnim "warunku" wstawiasz albo znaki które chcesz żeby były, albo znaki które chcesz zablokować.
Pyton_000
ikar twoje rozwiązanie przepuści np. coś takiego: 1312daf34YB9yb8=--":'*&%
pitu
Offtop:
Dlaczego chcesz zabronić znaków specjalnych w haśle?
Kloc
  1. $password = "sasds3Ab" ;
  2. if (preg_match ('#^[a-
  3. zA-Z0-9]+$#' , $password )) {
  4. echo'ok' ;
  5. } else {
  6. echo'no' ;
  7. }


Asig
Cytat(pitu @ 18.10.2014, 18:20:40 ) *
Offtop:
Dlaczego chcesz zabronić znaków specjalnych w haśle?


Sam nie wiem...
Chcę aby dozwolone były znaki takie jak w większych serwisach typu gogle, Microsoft.
Tam przy rejestracji jak wpisze się niewłaściwy znak (np. ą, ż) wyskakuje:
Kod
Hasło może zawierać następujące znaki: a-z, A-Z, 0-9 oraz typowe znaki interpunkcyjne.


Ten sposób (viking) działa ok:
  1. $password = "sasds3-#@@!#$%&(){}*+,-./:;<>=?[]^_|~$@$%&^%%^";
  2.  
  3. if(!strlen(preg_replace('/[a-zA-Z0-9-_\@\!\#\$\%\&\(\)\{\}\*\+\,\-\.\/\:\;\<\>\=\?\[\]\^\_\|\~]/', '', $password)) > 0) {
  4. echo'ok';
  5. } else {
  6. echo'blad';
  7. }


Jest wszystko cacy.

Dziękuję wszystkim za pomoc smile.gif
by_ikar
Cytat(Pyton_000 @ 18.10.2014, 18:15:27 ) *
ikar twoje rozwiązanie przepuści np. coś takiego: 1312daf34YB9yb8=--":'*&%

No shit sherlock:

Cytat
w ostatnim "warunku" wstawiasz albo znaki które chcesz żeby były, albo znaki które chcesz zablokować.


To był tylko przykład, a nie gotowiec. Negowałem tylko te znaki które opisał w pierwszym poście + dołączyłem "instrukcje" gdzie dodać te które chce aby występowały, albo te których nie chcę..
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.