Jeg forsøger at sammensætte en omfattende regex til validering af telefonnumre. Ideelt set ville det håndtere internationale formater, men det skal håndtere amerikanske formater, herunder følgende:
Jeg vil svare med mit nuværende forsøg, men jeg håber, at nogen har noget bedre og/eller mere elegant.
Det viser sig, at der findes en slags specifikation for dette, i det mindste for Nordamerika, kaldet NANP.
Du skal specificere præcis, hvad du ønsker. Hvad er lovlige afgrænsere? Mellemrum, bindestreger og punktum? Er ingen afgrænsere tilladt? Kan man blande afgrænsere (f.eks. +0.111-222.3333)? Hvordan håndteres udvidelser (f.eks. 111-222-3333 x 44444)? Hvad med særlige numre, f.eks. 911? Vil områdenummeret være valgfrit eller obligatorisk?
Her er en regex for et 7- eller 10-cifret nummer, hvor udvidelser er tilladt, og hvor afgrænsere er mellemrum, streger eller punktum:
^(?:(?:\+?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+))?$
Har du kigget på RegExLib?
Indtastning af et amerikansk telefonnummer gav en hel liste af muligheder.
Her er mit bedste forsøg indtil videre. Den kan håndtere de ovennævnte formater, men jeg er sikker på, at jeg mangler nogle andre mulige formater.
^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$