Avatar billede CodingJoe Nybegynder
28. august 2010 - 09:19 Der er 6 kommentarer og
1 løsning

CPR-NR med bindestreg validering.

Jeg har fundet følgende regexp på nettet til validering af cpr nr:
^(?:(?:31(?:0[13578]|1[02])|(?:30|29)(?:0[13-9]|1[0-2])|(?:0[1-9]|1[0-9]|2[0-8])(?:0[1-9]|1[0-2]))[0-9]{3}|290200[4-9]|2902(?:(?!00)[02468][048]|[13579][26])[0-3])[0-9]{3}|0000000000$

Det virker også fint, men det validerer desværre ikke et cpr.nr med '-', og det vil vi gerne. Jeg har forsøgt at få ovenstående til at ignorere '-' karakteren på plads nr. 7. Desværre uden held...
Er der een der kan hjælpe med at rekonstruere ovenstående så den også kan sluge et cprnr med bindestreg?
Avatar billede tjp Mester
30. august 2010 - 11:02 #1
Lidt af en nyser, men jeg tror følgende gør det:

^(?:(?:31(?:0[13578]|1[02])|(?:30|29)(?:0[13-9]|1[0-2])|(?:0[1-9]|1[0-9]|2[0-8])(?:0[1-9]|1[0-2]))[0-9]{2}-?[0-9]|290200-?[4-9]|2902(?:(?!00)[02468][048]|[13579][26])-?[0-3])[0-9]{3}|000000-?0000$
Avatar billede janus_007 Nybegynder
02. september 2010 - 00:55 #2
Man kan altid lige lave en replace inden man fyrer regex af jo, rydde lidt op i mellemrum mv. Ingen grund til at komplicere en regex mere end den allerede er i forvejen :)
Avatar billede CodingJoe Nybegynder
21. september 2010 - 12:23 #3
Jeg er desværre lidt uenig...jeg vil hellere pakke det hele ind i et regex.
Avatar billede tjp Mester
21. september 2010 - 13:19 #4
Ku du bruge regex'en?
Avatar billede CodingJoe Nybegynder
01. oktober 2010 - 19:30 #5
Nu afgav jeg desværre point før jeg testede det...den accepterer ikke tal med bindestreg før de fire cifre. Det optimale vil være at regexp udtrykket kun giver mig alle tallene tilbage...
Avatar billede CodingJoe Nybegynder
01. oktober 2010 - 19:31 #6
En tyrkfejl ved min test...det virker fint nu :)
Avatar billede poujor Praktikant
24. august 2018 - 14:01 #7
Problemet med ovenstående er, at det ikke validerer datoer i skudår efter år 2000 korrekt - test eksempelvis med: 290204-4216

RegEx nederst bør håndtere dette. Desuden accepteres følgende kombinationer mellem datodel og 'løbenummer' - angivet i ' ': '','<space>','-','<space>-','-<space>','<space>-<space>'

^(?:(?:31(?:0[13578]|1[02])|(?:30|29)(?:0[13-9]|1[0-2])|(?:0[1-9]|1[0-9]|2[0-8])(?:0[1-9]|1[0-2]))[0-9]{2}\s?-?\s?[0-9]|290200\s?-?\s?[4-9]|2902(?:(?!00)[02468][048]|[13579][26])\s?-?\s?[0-9])[0-9]]{3}|000000\s?-?\s?0000$


Det med fed markerede håndterer 'skilletegnene' og det i kursiv (det næstsidste 9-tal) er justering for at få 29. februar i årstal efter 2001 til at fungere korrekt.
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