[PHP] Login [a-z][0-9]

0

Witam!

Mam pytanie, jak napisać warunek, aby sprawdzał czy dany ciąg zawiera znaki tylko z przedziału [a-z][0-9]?? Próbowałem coś z funkcją eregi(), ale wychodziło mi że ciąg musiał zawierać zank ze zbioru [a-z] i znak ze zbioru [0-9]...

0
if (preg_match('/[a-z0-9]+/i', 'dany ciag')) {echo 'bingo!'} else {echo 'you\'re looser'}

w razie problemów kliknij powyżej na "preg_match" :)

0

Wielkie dzięki [!!!] Jeszcze nie opanowałem tych wyrażeń regularnych ;-P

0

Witam [!!!] Dopiero niedawno zauważyłem że ten kod, ktory mi podałeś nie działa... Nadal można wpisywać kropki, spacje, i różne inne znaki... sam sprawdź...

0

bo on sprawdza czy znajduje się litera albo cyfra - a nie czy są to jedyne znaki, musisz oznaczyć początek i koniec:

/^[a-z0-9]+$/i

//ups, jasne.. mea culpa :) - M

0

Działa! [rotfl]

0

co do stronki o wyrażeniach regularnych - polecam ( i nie tylko ja ) !! : www.regular-expressions.info
ale trzeba znać angielski dość dobrze

0

A coś troszkę bardziej skomplikowanego ;P

  1. Conajmniej 5 znaków długości
  2. Przynajmniej jeden znak z [0-9]
  3. Przynajmniej jeden znak z [A-Za-z]
  4. poza tym doswolone dowolne znaki z 1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()[];',./><?:"{}|+_-=

...oczywiście w dowolnej kolejności ;-)

0
Sebo napisał(a)

A coś troszkę bardziej skomplikowanego ;P

  1. Conajmniej 5 znaków długości
  2. Przynajmniej jeden znak z [0-9]
  3. Przynajmniej jeden znak z [A-Za-z]
  4. poza tym doswolone dowolne znaki z 1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()[];',./><?:"{}|+_-=

...oczywiście w dowolnej kolejności ;-)

$pass = '1234Z56';
$ext_chars = '!@#$%^&*()\[\];\',.\/><:"{}|+_=-';
if( strlen($pass) > 4 && preg_match('/^([0-9'.$ext_chars.']*[a-z]{1,}['.$ext_chars.']*[0-9]{1,}[a-z'.$ext_chars.']*|[a-z'.$ext_chars.']*[0-9]{1,}['.$ext_chars.']*[a-z]{1,}[0-9'.$ext_chars.']*)$/i', $pass) ){
  echo 'ok';
}
else{
  echo 'bu';
}

To powinno działać. Nie mam tylko pomysłu jak tą sumaryczną długość inaczej sprawdzać.
Druga rzecz to IMHO lepiej by było to zrobić kilkoma sprawdzeniami PHP, niż takim kolosalnym regexpem (chyba, że ktoś jakiś lepszy zmajstruje).

0

Też się za to zabrałem ale se odpuściłem - imho regexp w takim przypadku ma mały sens.
W klasie [] nie musisz 'eskejpować' nawiasu otwierającego '[' (zamykającego też nie jeśli to pierwszy znak).

Sumaryczną długość można by sprawdzić otaczając cały regexp grupą i dodając minimum powtorzeń:
(?:CałeToRegExp){5,}

Jeśli nie potrzebujemy łapać fregmentu do backreference to warto pamiętać by pisać (?:COŚ) zamiast (COŚ) - w przypadku długich i zagnieżdżonych wyrażeń różnica szybkości może być znaczna.

1 użytkowników online, w tym zalogowanych: 0, gości: 1