Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]pomoc w wyrażeniu regularnym
Forum PHP.pl > Forum > Przedszkole
tukan
Witam,
Czy może ktoś mi pomóc napisać wyrażenie regularne sprawdzające hasło, które powinno zawierać 5-15 znaków, składające się z dozwolonych znaków, z jakich składają się zazwyczaj na innych stronach ( przy czym nie musi być wymóg, że musi być cyfra, etc.)
Pozdrawiam! smile.gif
Aware
Po co używać wyrażeń regularnych skoro mamy strlen() w php.

www.php.net/manual/pl/function.strlen.php

  1. if(strlen($password) < 5) {
  2. // haslo za krotkie
  3. }
  4. else if(strlen($password) > 15) {
  5. // haslo za dlugie
  6. }
Niktoś
Strlen bada długość ciągów jednak nie zbada znaków w nich występujących.Dlatego przeważnie do walidacji używa się pregmatch i wyrażeń regularnych.
Spróbuj:
Cytat
"^(?:[0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]{5,15})$"

jeśli chcesz dodatkowe znaki np kropka to dodajesz w kwadratowym nawiasie:
Cytat
^(?:[0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ.]{5,15})$
Aware
Cytat
hasło, które
powinno zawierać 5-15 znaków, składające
się z dozwolonych znaków, z jakich składają
się zazwyczaj na innych stronach ( przy
czym nie musi być wymóg, że musi być
cyfra, etc.)


Chyba była mowa o sprawdzeniu długości hasła, czyli samo strlen() wystarczy :-)
Niktoś
Cytat
wyrażenie regularne sprawdzające hasło

Czytaj uważnie.
Twoim sposobem skazujesz użytkownika na ataki xss.
Jeśli już chcesz rozdzielić błędy na hasło długie,krótkie,nieprawidłowe to użyj i pregmatch i strlen().
abort
@Aware: Aha, a jak za pomocą strlen sprawdzisz, czy konkretny znak w haśle może być stosowany?

@tukan:
Generalnie ja bym zrobił to "na dwa".
Po pierwsze, sprawdził długośc hasła (to co pisał Aware).
Po drugie, sprawdził, czy w haśle nie są zawarte "niedozwolone" znaki. I użył preg_replace, na przykład tak:
  1. $pass = "1qa2ws3ed4rf5tg6yh";
  2. $allow = "/[asdfghjkl12345123]/";
  3. if (preg_replace ($allow, "", $pass)) echo "Niedozwolone znaki.";

Dozwolone znaki otaczamy ukośnikami i nawiazami kwadratowymi.
Jeśli chcesz, aby któryś z tych znaków był dozwolony, poprzedzasz backslashem: \
Jeśli backslash ma być dozwolonym wpisujesz go dwa razy: \\
Wszystkie litery (małe) możesz skrócić do [a-z], wszystkie duże do [A-Z], a wszystkie małe i duże do [a-zA-Z]. Cyfry do [0-9].
Jeśli znak "-" ma być dozwolony, musisz go umieścić na początku lub końcu
I tak litery (niezależnie od wielkości) i cyfry i znak "minus" skrócisz do [-a-zA-Z0-9].
Więcej nie piszę - poczytaj manual.
Niktoś
Preg replace -a po co nadpisywać?
Aware
Wątpie w to skoro i tak używasz jakiegoś hasha np. sha1, a jak ktoś będzie síę chciał wkraść na strone to i tak się włamie :-)
Niktoś
Cytat
Wątpie w to skoro i tak używasz jakiegoś hasha np. sha1, a jak ktoś będzie síę chciał wkraść na strone to i tak się włamie :-)
-to nie jest tylko kwestia deszyfrowania hasła,co jest praktycznie bardzo trudne, lecz możliwość wstrzyknięcia złośliwego kodu.
Może poczytaj o xss.
  1. $mojeHaslo="Ściśle tajne hasło";
  2. if (!preg_match("^(?:[0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]{5,15})$", $mojeHaslo)) {
  3. echo "Nieprawidłowe hasło.";
  4. }else{
  5. $hash=sha1($mojeHasło);
  6.  
  7. }
Aware
Nie musisz mnie odsyłać do lektury bo wiem co to jest xss i na czym polegają ataki. :-)
tukan
Dzięki za pomoc smile.gif
Chodziło mi właśnie o to, co napisał mi @Niktoś.
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.