
Comenzando con la respuesta de @Ravi, también apliqué algunas reglas de validación al código de área NPA (código de área).
Particularmente:
- Debe comenzar con 2 (o más).
- No puede tener «11» como segundo y tercer dígito (N11).
Hay algunas otras limitaciones, incluidos los bloques reservados (N9X, 37X, 96X) y 555, pero los dejé fuera, principalmente porque los bloques reservados podrían tener un uso futuro y 555 es útil para realizar pruebas.
se me ocurrio esto:
^((+d{1,2}|1)[s.-]?)?(?[2-9](?!11)d{2})?[s.-]?d{3}[s.-]?d{4}$
Alternativamente, si también desea hacer coincidir valores vacíos (cuando el campo no es obligatorio), puede usar:
(^((+d{1,2}|1)[s.-]?)?(?[2-9](?!11)d{2})?[s.-]?d{3}[s.-]?d{4}$|^$)
Mis casos de prueba para números válidos (muchos de la respuesta de @Francis) son:
18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1.800.555.1234
+1.800.555.1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
Mis casos de prueba no válidos incluyen:
(003) 555-1212 // Area code starts with 0
(103) 555-1212 // Area code starts with 1
(911) 555-1212 // Area code ends with 11
180055512345 // Too many digits
1 800 5555 1234 // Prefix code too long
+1 800 555x1234 // Invalid delimiter
+867 800 555 1234 // Country code too long
1-800-555-1234p // Invalid character
1 (800) 555-1234 // Too many spaces
800x555x1234 // Invalid delimiter
86 800 555 1212 // Non-NA country code doesn't have +
Mi expresión regular no incluye agrupación para extraer los grupos de dígitos, pero se puede modificar para incluirlos.
. Contenido relacionado:
Expresión regular para coincidir con el número de teléfono estándar de 10 dígitos {DH}