Regex telefoonnummer BE en NL
Ik ben op zoek naar een Regex voor telefoonnummers van BE en NL nummers.
Het gaat hier dus om mobiel en vast. Enkele voorbeelden van nummers zijn:
NL:
+31 89 1234567 (of aan elkaar)
0031 89 1234567 (of aan elkaar)
089-1234567
089 1234567 (of aan elkaar)
(089)1234567
BE:
012345678
0032 12345678 (of aan elkaar)
+32 12345678
Ik heb hierop al veel gezocht maar vind niet in combinatie.
Hartelijk dank!
De + vervangen door twee nullen
Alle overige tekens verwijderen (\D)
Tellen hoeveel cijfers je over houd?
@Chris in dat geval heeft jouw methode niet zoveel zin...
Als je documenten/sites/bestanden wilt scannen op telefoonnummers, zou ik omwille van de readability en maintainability een paar losse regex schrijven.
bijv:
[^\(\d]((?:\+|00)31[\s-]?\d{2}\s?\d{7}) // voor de bovenste twee NL telnrs
[^\(\d](\(?0\d{2}\)?[\s-]?\d{7}|\(0\d{3}\)[\s-]?\d{6}) // voor de volgende 3
etc.
Bedoeling is dat voor een klant van mij moet ik afdwingen van een valide telefoonnummer uit Nederland of Belgie.Overigens moet dit alles toch wel in 1 regex passen?
"+" - optie
"00" - optie
"0" - optie
tussen de 2 en 4 cijfers
"-" - optie
" " - optie
tussen de 6 en 8 cijfers
Volgens mij vang je hiermee zowel de Nederlandse als Belgische telefoonnummers mee af.
Nu alleen nog in Regex (A)
Het lastige is dat je een conditie moet inbouwen in je regex. Dat kan mbv lookahead, maar dan krijg je een redelijk uitgebreide regex, die moeilijk leesbaar en onderhoudbaar is. Als je simpelweg zegt:
\d{2,4}[\s-]?\d{6,8}
dan passeert 0229-12345678 ook als een geldig telefoonnummer. Een 8-cijferig telnr is alleen toegestaan bij een 2-cijferig kengetal. En 7 cijfers alleen bij een 3-cijferig kengetal enz. En dat zijn alleen nog de nederlandse regels.
Gezien de situatie en gezien jouw ervaring met regex, zou ik de tip van Chris opvolgen: het telefoonnummer opschonen, en daarna controleren hoeveel cijfers je hebt (en evt. of het telefoonnummer met een 0 begint).
Succes.