Een uitgebreide regex voor telefoonnummer validatie

Ik probeer een uitgebreide regex samen te stellen om telefoonnummers te valideren. Idealiter zou het internationale formaten verwerken, maar het moet Amerikaanse formaten verwerken, waaronder de volgende:

  • 1-234-567-8901
  • 1-234-567-8901 x1234
  • 1-234-567-8901 ext1234
  • 1 (234) 567-8901
  • 1.234.567.8901
  • 1/234/567/8901
  • 12345678901

Ik'zal antwoorden met mijn huidige poging, maar ik'hoop dat iemand iets beters en/of eleganters heeft.

Het blijkt dat er, althans voor Noord-Amerika, een soort specimen voor bestaat, de NANP genaamd.

Je moet precies specificeren wat je wilt. Wat zijn legale scheidingstekens? Spaties, streepjes, en punten? Geen scheidingstekens toegestaan? Mag je scheidingstekens mengen (bv. +0.111-222.3333)? Hoe wordt omgegaan met extensies (bijv. 111-222-3333 x 44444)? Hoe zit het met speciale nummers, zoals 911? Wordt het netnummer optioneel of verplicht?

Hier's een regex voor een 7 of 10 cijferig nummer, met uitbreidingen toegestaan, scheidingstekens zijn spaties, streepjes, of punten:

^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$
Commentaren (10)

Heb je al eens gekeken naar RegExLib?

Als je daar een Amerikaans telefoonnummer invult, krijg je een hele lijst met mogelijkheden.

Commentaren (2)

Hier's mijn beste poging tot nu toe. Het behandelt de bovenstaande formaten, maar ik'ben er zeker van dat ik enkele andere mogelijke formaten mis.

^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$
Commentaren (0)