13. april 2010 - 07:55Der er
12 kommentarer og 1 løsning
reg exp hvorfor tillades mellemrum
Jeg har følgende:
if(!preg_match('#^[a-zA-ZæøåÆØÅ]{3,}#',$_POST['adgangskode'])) $arr_validering['adgangskode'] = 1; Her defineres $arr_validering hvis man skriver et mellemrum eller punktum.
if(!preg_match('#^[a-zA-ZæøåÆØÅ\.]+#',$_POST['navn'])) $arr_validering['navn'] = 1; Her defineres $arr_validering ikke hvis man skriver et mellemrum eller punktum.
Dine udtryk fortæller kun noget om, hvordan strengen skal se ud i starten. Hvis det skal gælde for hele strengen, skal du afslutte med $ (ligesom du begynder med ^)
Jeg har vaeret vaek i dag, derfor ser jeg foerst nu dette indlaeg. Jeg ser paa dit indlaeg #3 som udmunder i et spoergsmaal. Det ser ud til stadig at vaere aabent, saa...
Du proever at validere adgangskode og navn ved hjaelp af regular expressions. Ved at bruge "if(!preg_match...." tester du om adgangskode er forskellig fra tre alfanumeriske tegn og om navn er forskelligt fra et eller mere alfanumeriske/punktum/space tegn. Det giver i min test det omvendte resultat af det du siger (hvis 1 betyder validering.) Hvis der i adgangskoden er et punktum eller space saa fejler den at matche din regulaere expression hvilket er en success (fordi du tester for mismatch) og hvis du i navnet har en space eller et punktum saa matcher navnet hvilket ikke validerer fordi du tester for mismatch.
Hvordan skal adgangskoden se ud og hvordan skal navnet se ud? Hvilke krav stiller du for at de skal valideres? Forklar det krystalklart, saa vil vi nok kunne designe regulaere expressions der tester for validering.
Lad os lige repetere at de tre 'antal' operatorer er * der betyder nul eller flere, + der betyder en eller flere, og ? der betyder nul eller en. Tre eller flere kan udtrykkes som 3 plus nul eller flere. Saa en adgangskode med tre eller flere alfanumeriske tegn (og intet andet) kan testes saaledes:
Adgangskoden skal være mellem 3 og 10 tegn. Er det så: #^[a-zA-ZæøåÆØÅ0-9]{3,}[a-zA-ZæøåÆØÅ0-9]{0,7}$# ?
Navnet skal mindst være mellem 2 og 100 tegn. Et space kan ikke være et af de to tegn. Skal det så være: #^[a-zA-ZæøåÆØÅ]{2,2}[a-zA-ZæøåÆØÅ\-\.\s]{0,98}$# ?
Med en adgangskode mellem 3 og 10 tegn begraenset til alfanumerik er dette tilstraekkeligt:
#^[a-zA-ZæøåÆØÅ0-9]{3,10}$#
Hvis navnet skal vaere mindst 2 og hoejst 100 tegn og space, punktum, og bindestreg ikke maa vaere mellem de foerste to tegn men gerne maa (men ikke behoeve at) vaere mellem de foelgende tegn er jeg enig i din anden expression undtagen at {2,2} kun behoever at vaere {2}
Så nu validerer de? men ved eksempelvis adgangskoden, der er forskellen at der er udråbstegn foran funktionen. Altså at jeg tester for mismatch og ikke en egentlig validering.
Set ud fra et sikkerhedsmæssigt synspunkt, så burde alle tegn i ubegrænset mængde vel tillades i et password (det bør også gemmes som en hash i databasen).
Brugernavnet derimod, kan man sagtens tillade sig at begrænse.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.