Avatar billede neocron Nybegynder
26. oktober 2008 - 01:37 Der er 6 kommentarer

Hjælp med tilretning af regexp

Hej,

Jeg sidder og knokler lidt med at forsøge at blive bedre til at forstå og skrive regexps. Jeg har leget med det før i tiden, men... :)

Sagen er den, at jeg vil validere at et sagsnummer er ok.

Sagsnummeret har formaten id1000 og derover.
Det betyder at følgende skal tjekkes:

1. Starter strengen med upper/lowercase id?
2. Tallet efter id skal være >= 1000 og <= 1000000.

Nr. 1 er simpel nok, /^id/i...
Nr. 2 giver mig lidt mere hovedbrud da jeg ikke rigtig ved hvordan den virker med tal. Min første newbie løsning er at tjekke om det første tegn efter id er 1-9 (den skal naturligvis ikke kunne være 0). Dernæst skal der så kunne være 3-5 tal.

Det har fremfødt følgende, som jeg desværre tror er noget værre pladder:

/^id[1-9]{1}[0-9]{3-5}/i

Kan I hjælpe med at få denne gjort rigtig og/eller oplyse om jeg har taget den besværlige måde at gøre det på?
Avatar billede nielle Nybegynder
26. oktober 2008 - 06:22 #1
/^id[1-9][0-9]{3,5}$/i
Avatar billede nielle Nybegynder
26. oktober 2008 - 06:30 #2
Den viste tillader id numre i intervallet

id1000 - id999999

id1000000 mangler altså.

Nu er regexp ikke specielt velegnet til at lave numeriske sammenligninger i stil med dit punkt 2. Det bliver som regel rimeligt grimt ret hurtigt. Men det kan da gøres:

^id([1-9][0-9]{3,5}|1000000)$
Avatar billede roenving Novice
26. oktober 2008 - 07:55 #3
-- og så er der et shortcut til tal (digits):

/^id([1-9]\d{3,5}|1000000)$/i
Avatar billede erikjacobsen Ekspert
26. oktober 2008 - 08:02 #4
Jeg må give nielle ret - man skal (normalt) kun checke ren struktur i regulære udtryk. Mit forslag vil være at kontrollere at der står "id" efterfulgt af cifre, i det regulære udtryk. Derefter i en if-sætning, og det er mellem 1000 og 1000000.

Forestil dig, at du pludselig får at vide, at nu er øvre grænse 1100000. Hvor nemt er det at ryste et regulært udtryk ud af ærmet? Hvor nemt er det at rette et tal i en if-sætning?
Avatar billede erikjacobsen Ekspert
26. oktober 2008 - 08:03 #5
Og ikke at glemme: Hvor nemt er det at se hvad /^id([1-9]\d{3,5}|1000000)$/i betyder?
Avatar billede nielle Nybegynder
29. december 2008 - 09:44 #6
Fik du løst dit problem?
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
Kurser inden for grundlæggende programmering

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