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

Odpowiedz Nowy wątek
2006-09-06 22:05
php_question
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]...

Pozostało 580 znaków

2006-09-06 22:17
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" :)


Pozostało 580 znaków

2006-09-07 16:38
php_question
0

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

Pozostało 580 znaków

2006-09-11 18:11
php_quest
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ź...

Pozostało 580 znaków

2006-09-11 18:16
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


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-09-11 18:43
php_question
0

Działa! [rotfl]

Pozostało 580 znaków

2006-09-11 22:02
0

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


Hey ho!

Pozostało 580 znaków

2006-09-12 01:06
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 b>[email protected]#$%^&*()[]\;',./<?:"{}|+_-=</b>

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


<font color="darkblue"><font size="5">セボ</span>
Java PHP SQL
MatLab C# C++ Prolog SIOD</span>
<font size="1">Dziwne jest to, że na większość zadanych tu pytań sam sobię odpowiadam :]</span>

Pozostało 580 znaków

2006-09-12 03:18
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 b>[email protected]#$%^&*()[]\;',./<?:"{}|+_-=</b>

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

$pass = '1234Z56';
$ext_chars = '[email protected]#$%^&*()\[\];\',.\/><:"{}|+_=-';
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).


"Angels that are forced from heaven
Have to become demons"
- Vicious

Pozostało 580 znaków

2006-09-12 03:29
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.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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