Avatar billede Slettet bruger
24. marts 2005 - 16:04 Der er 17 kommentarer og
1 løsning

preg_match, kun tal og skråstreg

Jeg vil gerne kun have tal [0-9] og '/' i min variabel. Det tester jeg sådan:

if(!preg_match("/^\d+(\/\d+)?$/", $_GET[$navn]))

men den siger fejl hver eneste gang.!
Avatar billede detox Nybegynder
24. marts 2005 - 16:18 #1
Måske:

if(!preg_match("/^[\/|\d]+$/", $_GET[$navn]))
Avatar billede barklund Nybegynder
24. marts 2005 - 17:22 #2
Hm, hvis man skriver | i et character-set, bliver den så ikke en del af sættet? Jeg tror blot det er:

if(!preg_match("#^[/0-9]+$#", $_GET[$navn]))

Men måske jeg tager fejl :)

--
Morten Barklund
Avatar billede barklund Nybegynder
24. marts 2005 - 17:22 #3
Ellers ville det jo være:

if(!preg_match("/^(\/|\d)+$/", $_GET[$navn]))
Avatar billede Slettet bruger
24. marts 2005 - 17:58 #4
der skal mindst være ét ciffer, og hvis der er en eller flere  '/' skal de allesammen være mellem tal.. dvs ingen / i start og slut
Avatar billede roenving Novice
24. marts 2005 - 18:04 #5
Hvad hedder den fejl, du får ?-)

-- for den eneste fejl, jeg kan se, er at du ikke tillader flere skråstreger/tal-ting, så:

if(!preg_match("/^\d+(\/\d+)*$/", $_GET[$navn]))
Avatar billede rednex Nybegynder
24. marts 2005 - 18:08 #6
Grunden til at den fejler er at backslash (\) er et specialtegn når det står mellem gåseøjne ("). Det vil sige at hver gang dit regex skal indeholde en backslash skal du lave to efter hinanden (\\). Alternativt kan sætte udtrykket i plinger (') istedet.
Avatar billede barklund Nybegynder
24. marts 2005 - 18:21 #7
Hm, det passer da ikke? Du kan da godt escape med en enkelt backslash:

$ php -r 'var_dump(preg_match("/\//","/"));'
int(1)
$ php -r 'var_dump(preg_match("/\\//","/"));'
int(1)

Begge dele virker fint.

--
Morten Barklund
Avatar billede barklund Nybegynder
24. marts 2005 - 18:25 #8
Men tilbage til spørgsmålet. Hvis jeg forstår dig ret, er alle følgende lovlige udtryk:

1
12/34
12/3/4
1///2//3/4

Right?

Så hedder det:

if(!preg_match("#^\d+(/+\d+)*\d$#", $_GET[$navn]))

Så vidt jeg lige kan regne mig frem til :)

--
Morten Barklund
Avatar billede Slettet bruger
24. marts 2005 - 19:17 #9
nej det er ikke korrekt, disse er lovlige:

12
12/34
12/3/4

Disse er ikke lovlige

12/
/15/61
45 54
sd54sd
45fd / df45d
48/ 48
Avatar billede barklund Nybegynder
24. marts 2005 - 19:27 #10
Så 12//34 er ikke lovlig?
Avatar billede detox Nybegynder
24. marts 2005 - 20:31 #11
Så må det jo være:

if(!preg_match("#^\d+(/\d+)*$#", $_GET[$navn]))
Avatar billede Slettet bruger
24. marts 2005 - 20:38 #12
hvad gør # ?
Avatar billede detox Nybegynder
24. marts 2005 - 21:52 #13
# omkranser regexp udtrykket istedet for /, da den er en del af udtrykket.
Avatar billede detox Nybegynder
24. marts 2005 - 21:53 #14
Det kan være hvilket som helst tegn.
Avatar billede Slettet bruger
29. marts 2005 - 09:24 #15
prøver lige når jeg kommer hjem i dag :o)
Avatar billede Slettet bruger
30. marts 2005 - 19:58 #16
Smid svar tak detox. det virker præcis som det skal..

Hvordan kan det være at mit ikke virkede, det var jo utrolig tæt på at være det samme.
Avatar billede detox Nybegynder
30. marts 2005 - 22:19 #17
Ok, tja du var faktisk tæt på med dit oprindelige forslag, men * tillader jo 'ingen eller flere gentagelser'.
Avatar billede Slettet bruger
31. marts 2005 - 18:49 #18
Jep, den glemte jeg
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