Avatar billede htx98i17 Professor
13. april 2010 - 07:55 Der 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.

Hvordan kan det være?
Avatar billede htx98i17 Professor
13. april 2010 - 08:07 #1
arg. Jeg tror jeg roder rundt i det her. Nu vil den øverste gerne tillade space.

Hvordan kan det være, når jeg ikke har \s i mønsteret?
Avatar billede ksoren Nybegynder
13. april 2010 - 10:17 #2
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 ^)
Avatar billede htx98i17 Professor
13. april 2010 - 11:44 #3
aaahhh

så kom de til at se således ud:

//tjek adgangskode
if(!preg_match('#^[a-zA-ZæøåÆØÅ0-9]{3,}$#',$_POST['adgangskode'])) $arr_validering['adgangskode'] = 1;

//tjek navn
if(!preg_match('#^[a-zA-ZæøåÆØÅ\.\s]+$#',$_POST['navn'])) $arr_validering['navn'] = 1;

Så nu er space tilladt i navnet og ikke i adgangskoden.

Men hvis der SKAL være space et eller andet sted i navnet, så skal jeg bruge + et andet sted, ik?
13. april 2010 - 21:18 #4
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.
Avatar billede htx98i17 Professor
13. april 2010 - 21:35 #5
Jeg kan godt følge dig.

Adgangskode må kun indeholde: a-zA-ZøæøåÆØÅ0-9 og skal være på mindst 3 tegn.

Navn må indeholde det samme som ovenover + punktum, bindestreg og space

Jeg håber jeg har fået det hele med :)
13. april 2010 - 22:39 #6
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:

if(preg_match('#^[a-zA-ZæøåÆØÅ0-9]{3,}[a-zA-ZæøåÆØÅ0-9]*$#',$_POST['adgangskode'])) $arr_validering['adgangskode'] = 1;

Hvor langt skal navnet vaere?  Mindst et tegn?  Er et navn som ' ' valid?  I saa fald skulle dette virke:

if(preg_match('#^[a-zA-ZæøåÆØÅ\-\.\s]+$#',$_POST['navn'])) $arr_validering['navn'] = 1;
Avatar billede htx98i17 Professor
14. april 2010 - 07:19 #7
Tak for svar.

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}$# ?
14. april 2010 - 07:49 #8
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}
Avatar billede htx98i17 Professor
14. april 2010 - 09:17 #9
Super

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.
14. april 2010 - 10:11 #10
I dit oprindelige spoergsmaal brugte du "if(!preg_match...." altsaa testede du oprindeligt for mismatches.

Jeg forstod saa dit indlaeg #5 at du oensker at teste for matches, saa jeg gav i #6 "if(preg_match....")

Hvis det er korrekt forstaaet at du vil teste for matches og hvis dine matches er som du siger i #7 saa faar du disse matches med denne kode:

if(preg_match('#^[a-zA-ZæøåÆØÅ0-9]{3,10}$#',$_POST['adgangskode'])) $arr_validering['adgangskode'] = 1;

if(preg_match(#^[a-zA-ZæøåÆØÅ]{2}[a-zA-ZæøåÆØÅ\-\.\s]{0,98}$#), $_POST['navn'])) $arr_validering['navn'] = 1;
Avatar billede ksoren Nybegynder
14. april 2010 - 10:43 #11
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.
Avatar billede htx98i17 Professor
14. april 2010 - 13:41 #12
ksoren2 hvad mener du med hash i databasen?

Jeg gemmer med PASSWORD() i sql'en
Avatar billede htx98i17 Professor
14. april 2010 - 13:42 #13
tak for deltagelsen
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester