Problem med Preg_match og elseif

Tags:    php

Jeg er ved at skrive en stump kode til at validere brugerinput fra en kontaktformular på en hjemmeside. I den forbindelse vil jeg gerne have to mulige fejlmeddelelser, en til hvis det indtastede ikke overholder formatet FORNAVN EFTERNAVN eller indeholder specialtegn, og en til hvis det indtastede indeholder numeriske værdier.


Jeg er selv kommet frem til dette:

Fold kodeboks ind/udPHP kode 


Men ovenstående resulterer i at alt med tal slipper igennem. Jeg har prøvet at teste for mismatch ved at sætte en udråbstegn foran preg_match nummer to, men det resulterer selvfølgelig bare i at den returnere false for alt, ligegyldigt om strengen indeholder tal eller ej.


Er der nogen der har nogle forslag til hvad jeg gør galt her?


På forhånd tak for hjælpen ! :D



4 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Jeg er ikke sikker. Men jeg tror at det her ville virke.
Fold kodeboks ind/udPHP kode 


Jeg har lavet nogle få ændringer.

  1. Puttet $result['valid'] = true øverest i scriptet. På den måde bliver der som standard gået udfra at et navn er valid, med mindre match'en siger noget andet. (Denne tilgang er lidt omvendt og scriptet burde muligvis vendes om, til at der gåes udfra at et navn som standard ikke er valid, til det modsatte er bevist.)

  2. Lavet din elseif om til en almindelig if, da der skal tjekkes for om både det ene og det andet er rigtigt.



Jeg håber at det virker. Jeg vidste ikke hvad $name i $result['reason'][$name] var, så jeg blev nød til at gætte :)




Indlæg senest redigeret d. 17.07.2013 18:57 af Bruger #13363
Der kan da ikke være tal i et navn? :)

Fold kodeboks ind/udPHP kode 


Der vil være nogle udfordringer med ovenstående, i og med at man kan indtaste to bindestreger, og så er den god.

Men du kan også splitte navnet ved mellemrum, og så validere hver enkelt del, så bliver det mindre komplekst.
Fold kodeboks ind/udPHP kode 


Du skal nok lige teste, da det blot er noget der er kastet sammen hurtigt. :)



Fuldstændig genial ide Tommy!

Fremgangsmåden med at gå ud fra at inputtet er valid løste de fleste problemer. Efter så at have byttet om på nogle ting og fjernet 0-9 fra den første preg_match endte jeg med nedenstående som bare virker!

Fold kodeboks ind/udPHP kode 


@Michael nej du har ret i at der ikke kan være tal i et navn, men da jeg brugte ifelse virkede det mest logisk ikke at kigge efter tal i den første preg_match. Det er jeg også endt med at fjerne igen. At splitte navnet inden man kigger på det virker som en god idé, det tror jeg jeg vil prøve at rodde lidt med, men måske det er farligt at gå ud fra at et navn er minimum 2 tegn. K er fx et gyldigt dansk pigenavn i hvert fald ifølge: http://graviditet-og-barn.dk/navnedatabase.html





Daniel: graviditet-og-barn.dk er vist ikke en statskontrolleret navnedatabase, så det er nok begrænset hvor valid dataen er. :) Dermed ikke sagt at man ikke kan få registreret et-bogstavs navne, det ved jeg ikke noget om, men jeg tvivler stærkt. :)

Jeg ville hellere forholde mig til familiestyrelsens hjemmeside http://www.familiestyrelsen.dk/samliv/navne/soeginavnelister/godkendtefornavne/



t