Avatar billede loevstroem Nybegynder
31. marts 2010 - 14:06 Der er 7 kommentarer og
2 løsninger

Hjælp til regex

Hej Eksperter,

Jeg forsøger at validere en streng med specielle tegn.

De tilladte tegn er som følger:
A-Z (store som små)
Æ, Ø og Å (store som små)
Mellemrum

Indeholder strengen andet end dette skal den returnere false.

Mit problem er, at jeg ikke kan få den til at virke med æ ø å, dette betragtes pt. som false - hvorledes gør jeg dette?


$foo = "test en streng med øåæ!";

if(preg_match("/^[\w\s]+$/u", $foo)) {
echo "VALID";
} else {
echo "NOT VALID!";
}
31. marts 2010 - 22:15 #1
Jeg er noedt til at forklare at jeg som udenlandsdansker ikke har ae, oe, og aa paa mit tastatur.  Det maa du abstraherer fra i det foelgende.

\w er normalt defineret som "word characters" der indeholder [A-Za-z0-9_] det vil sige alle store og smaa bogstaver fra a til z plus tal plus _ .

Saa synes du at forvente at med modifier /u (unicode) skal \w ogsaa indeholde store og smaa ae, oe, og aa.  Den kender jeg ikke selv og jeg har ikke kunnet google mig frem til det.  Hvis det skulle virke, er det saa maaske "!" der er problemet i saetningen "test en streng med øåæ!"

Men jeg har tidligere faaet regular expressions til at virke paa ae, oe, og aa ved at indfoere dem specifiek i moensteret, saaledes:

preg_match("/^[\w\saeoeaaAEOEAA]+$",$foo)  Det var maaske et forsoeg vaerd.
Avatar billede loevstroem Nybegynder
31. marts 2010 - 23:06 #2
Hej Christan,

Tak for dit svar.

Det var et dumt eksempel med ! i min streng, eftersom den selvfølgelig ikke skal tillade dette. Men den returnere stadig false selvom man fjerner ! og der kun står æøå.
31. marts 2010 - 23:16 #3
Hvordan virker det saa hvis du indsaetter ae, oe, og aa i dit moenster?
Avatar billede loevstroem Nybegynder
31. marts 2010 - 23:27 #4
if(preg_match('/^[\w\sæøåÆØÅ]+$', $foo))  {

Giver flg.:

Warning: preg_match() [function.preg-match]: No ending delimiter '/' found in /var/www/vhosts/

Her kan jeg ikke umiddelbart se fejlen..
Avatar billede Slettet bruger
01. april 2010 - 00:38 #5
Warning: preg_match() [function.preg-match]: No ending delimiter '/' found in /var/www/vhosts/

Fejlmeldingen fortæller dig hvad du der mangler og hvad du skal indsætte ;-)

Du starter din regex med en almindelig skråstreg "/", første tegn i en regex er det tegn der fortæller hvor din regex starter.
Samme tegn skal indsættes når din regex er færdig, så du har mulighed for at indsætte forskellige indstillinger såsom case-insensitive (i), ungreedy (G) osv.

Så prøv og slut din regex af med dit delimiter-tegn "/" så det kommer til at se således ud:

if(preg_match('/^[\w\sæøåÆØÅ]+$/', $foo))  {
01. april 2010 - 08:09 #6
Ja naturligvis, / en glemte jeg.  Du havde den (efterfulgt af modifieren u) i din oprindelige string.
Avatar billede loevstroem Nybegynder
01. april 2010 - 12:45 #7
Nu virker det efter hensigten.

Tak for hjælpen begge to - vil i eventuelt dele point?
01. april 2010 - 13:33 #8
Jamen det var godt.  Her er svar fra mig.
Avatar billede Slettet bruger
01. april 2010 - 16:10 #9
og et svar fra mig her.
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