[PHP] Wachtwoord checken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bij het bouwen van een inlogscriptje loop ik tegen het volgende aan. Het wachtwoord dient tenminste één kleine letter, één hoofdletter en één cijfer te bevatten. Nu had ik het onderstaande verzonnen maar het werkt niet. Iemand een idee wat er mis is en mij verder zou kunnen helpen?

$pattern = "/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).$/";
if (preg_match($pattern, $wachtwoord))
{
echo "Wachtwoord is ok";
}

Als ik bijv. Juli2004 invoer dan is het toch niet ok. Alvast bedankt.

Acties:
  • 0 Henk 'm!

Verwijderd

Omdat je aangeeft in je regular expression dat het eerste karakter een getal moet zijn en het laatste karakter een hoofdletter (^ resp. $) als je dat er als eerste er eens uithaalt kom je vast al veel verder...

[ Voor 5% gewijzigd door Verwijderd op 28-07-2004 10:00 . Reden: typootje... ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat het niet werkt omdat je wel netjes met lookahead expressies checkt op de nodige voorwaarden, maar vervolgens de zoekstring beperkt tot één teken (dmv de punt voor de $).

Als je de lookaheads weglaat, ziet de expressie er zo uit, en dan zie je meteen waarom het niet werkt:

code:
1
^.$


Deze expressie zal overigens nooit matchen want een wachtwoord van 1 teken kan natuurlijk nooit tekens uit 3 verschillende klasses bevatten.

Een mogelijke oplossing is zonder dollar:

code:
1
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).


of anders met een * erbij:

code:
1
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$

[ Voor 17% gewijzigd door Verwijderd op 28-07-2004 10:12 ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Dit is nou typisch zo'n geval waarbij een enkele regex echt zwaar overdone is voor hetgeen je wilt doen. Er is niets mis met gewoon een eenvoudige old-fashioned way van de dingen aanpakken; regexen zijn niet heilig ofzo.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Ben ik 't niet helemaal mee eens... met een regex kan 't in één commando; anders moet je er zelf weer een functie voor gaan schrijven.

Gemak dient de mens (en vooral de luie programmeur ;)).

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

OneOfBorg:
Gemak dient de mens (en vooral de luie programmeur ;)).
Mja, tenzij je er vervolgens zo erg op moet gaan zitten ploeteren dat je er een topic voor moet openen. Ik bedoel alleen maar te zeggen dat regexen leuk en handig zijn, maar als er eenvoudiger oplossingen zijn die je sneller kunt toepassen, er niks mis mee is om die gewoon te gebruiken :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ik ben ook tegen al die regexen die iedereen altijd gebruikt. Het is compleet onleesbaar, je maakt er zo snel een fout in. Je moet het ontzettend veel testen, want het zit er dik in dat bepaalde vreemde strings nog steeds fout gaan, etc.

Bovendien ga je dan nog lookaheads gebruiken...jouw probleem is al niet eens een regulier probleem.

Het is veel makkelijker om 3 kleine functieste schrijven; hasUpper() hasLower() hasDigit(), die je simpel kan testen en dan met logical and samenvoegen...het is hoogstwaarschijnlijk nog sneller ook. En ga mij niet vertellen dat het minder code gemak is dan zo'n vreemde regex te verzinnen.

Acties:
  • 0 Henk 'm!

  • muis
  • Registratie: Oktober 2001
  • Laatst online: 18-11-2022
Zoijar schreef op 28 juli 2004 @ 10:53:
Ik ben ook tegen al die regexen die iedereen altijd gebruikt. Het is compleet onleesbaar, je maakt er zo snel een fout in. Je moet het ontzettend veel testen, want het zit er dik in dat bepaalde vreemde strings nog steeds fout gaan, etc.

Bovendien ga je dan nog lookaheads gebruiken...jouw probleem is al niet eens een regulier probleem.

Het is veel makkelijker om 3 kleine functieste schrijven; hasUpper() hasLower() hasDigit(), die je simpel kan testen en dan met logical and samenvoegen...het is hoogstwaarschijnlijk nog sneller ook. En ga mij niet vertellen dat het minder code gemak is dan zo'n vreemde regex te verzinnen.
daarvoor kun je er ook een functie van maken, zet je comment erbij en je hoeft er nooit meer naar om te kijken

Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)

Pagina: 1