Quiero escribir una expresión regular para un número de teléfono de tipo estándar de EE. UU. Que admita los siguientes formatos:
###-###-####
(###) ###-####
### ### ####
###.###.####
donde # significa cualquier número. Hasta ahora se me ocurrieron las siguientes expresiones
^[1-9]\d{2}-\d{3}-\d{4}
^\(\d{3}\)\s\d{3}-\d{4}
^[1-9]\d{2}\s\d{3}\s\d{4}
^[1-9]\d{2}\.\d{3}\.\d{4}
respectivamente. No estoy muy seguro de si el último es correcto para el cheque con puntos. También quiero saber si hay alguna forma de que pueda escribir una sola expresión en lugar de las 4 diferentes que se adaptan a los diferentes formatos que mencioné. Si es así, no estoy seguro de cómo lo hago. Y también cómo modifico la expresión / expresiones para que también pueda incluir una condición para admitir el código de área como componente opcional. Algo como
+1 ### ### ####
donde +1 es el código de área y es opcional.
Respuestas:
Coincide con lo siguiente
Si no desea una coincidencia en números que no sean de EE. UU., Use
Actualización:
como lo notó el usuario Simon Weaver a continuación, si también está interesado en hacer coincidir números sin formato, simplemente haga que la clase de carácter separador sea opcional como
[\s.-]?
fuente
?
no se aplica a los paréntesis()
, no a los dígitos. La expresión regular relacionada completa es\(?\d{3}\)?
.\d{3}
especifica que debe haber tres dígitos entre los()
que son (hechos) opcionales (por?
).?
después de cada uno[\s.-]
para que sea opcional^(\+\d{1,2}\s)?((\(\d{3}\))|(\d{3}))[\s.-]\d{3}[\s.-]\d{4}$
. (Básicamente, solo dupliqué el segmento de la expresión regular que cubre el código de área yHay muchas variaciones posibles para este problema. Aquí hay una expresión regular similar a una respuesta que coloqué anteriormente en SO.
Coincidiría con los siguientes ejemplos y mucho más:
Independientemente de la forma en que se ingrese el número de teléfono, los grupos de captura se pueden usar para desglosar el número de teléfono para que pueda procesarlo en su código.
Aquí hay un desglose de la expresión si está interesado:
Para que el código de área sea opcional, simplemente agregue un signo de interrogación después de (\ d {3}) para el código de área.
fuente
\s
al principio y al final no son necesarios, porque lo estoy usando para la validación y el campo ya está recortado.^(\+\d{1,2}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
Coincide con estos números de teléfono:
Ver regex101.com
fuente
Aquí hay uno bastante compacto que creé.
Probado en los siguientes casos de uso.
fuente
Agregando un ejemplo usando las soluciones mencionadas anteriormente en jsfiddle. He modificado un poco el código según los requisitos de mis clientes. Espero que esto también ayude a alguien.
Ver ejemplo aquí
fuente
prueba esto para los usuarios de Pakistán. Aquí hay uno bastante compacto que creé.
Probado en los siguientes casos de uso.
fuente
Número de teléfono regex que uso:
/^[+]?(\d{1,2})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/
Cubiertas:
fuente
Las expresiones para 1, 3 y 4 son bastante similares, por lo que puede usar:
Tenga en cuenta que, según el idioma y la marca de expresiones regulares que se utilicen, es posible que deba poner en
\2
lugar de$2
o que tal coincidencia no sea compatible en absoluto.No veo una buena manera de combinar esto con el formato 2, aparte de lo obvio
^(regex for 1,3,4|regex for 2)$
que es feo, torpe y hace que sea difícil sacar las partes de los números.En cuanto al código de área, puede agregar
(\+\d)?
al principio para capturar un código de área de un solo dígito (lo siento, no conozco el formato de sus códigos de área).fuente
¿Qué tal esto?
EDITAR: Me olvidé del (). EDITAR 2: Se equivocó la primera parte de los 3 dígitos.
fuente
.
cuando se está en una clase de carácter, por lo que[-\.\s]
debería serlo[-.\s]
, porque no queremos hacer coincidir una barra invertida.[\.]
y[.]
ambos coinciden solo con el punto, mientras que[\\.]
coincide con el punto y la barra invertida. Gracias por tu comentario.Comenzando con la respuesta de @ Ravi, también apliqué algunos reglas de validación para el código NPA (área) .
En particular:
Hay un par de otras restricciones, incluidos los bloques reservados (N9X, 37X, 96X) y 555, pero los dejé fuera, sobre todo porque los bloques reservados pueden tener un uso futuro, y el 555 es útil para realizar pruebas.
Esto es lo que se me ocurrió:
Alternativamente, si también desea hacer coincidir valores en blanco (si el campo no es obligatorio), puede usar:
Mis casos de prueba para números válidos (muchos de la respuesta de @Francis) son:
Mis casos de prueba no válidos incluyen:
Mi expresión regular no incluye agrupación para extraer los grupos de dígitos, pero se puede modificar para incluirlos.
fuente
Quizás el más fácil se compare con varios otros.
Coincide con lo siguiente:
fuente
Este código coincidirá con un número de teléfono de EE. UU. O Canadá y también garantizará que sea un código de área y un intercambio válidos:
Prueba en Regex101.com
fuente
Patrón de expresiones regulares para validar un número de teléfono normal de 10 dígitos más un código internacional opcional (de 1 a 3 dígitos) y un número de extensión opcional (cualquier número de dígitos):
Demostración: https://www.regextester.com/103299
Entradas válidas:
fuente
Encuentro esta expresión regular más útil para mí para el número de contacto de 10 dígitos:
Referencia : https://regex101.com/r/QeQewP/1
Explicación:
fuente
fuente
Esta es una versión más completa que coincidirá tanto como se me ocurra, así como también te brindará una coincidencia de grupos por país, región, primero y último.
fuente
¿qué pasa con varios números con "+" y sepárelos con ";" "," "-" o "" caracteres?
fuente
Terminé con
const regexBase = '(?:\\+?(\\d{1,3}))?[-. (]*(\\d{3})?[-. )]*(\\d{3})[-. ]*(\\d{4,5})(?: *x(\\d+))?'; const phoneRegex = new RegExp('\\s*' + regexBase + '\\s*', 'g');
esto fue para permitir cosas como números holandeses, por ejemplo
+358300 20200
fuente
Por encima de la expresión regular hay una ligera modificación de
@Francis Gagnon.
Objetivo: detectar cualquier patrón posible, un usuario puede compartir su número de teléfono de EE. UU.
Versión 1:
Versión 2:
Contenido: los casos de prueba pueden ser parte de la cadena. En la versión uno, los casos de prueba deberían ser el comienzo de una línea para que funcione.
Si puede encontrar un patrón que puede fallar, por favor comente y lo arreglaré.
Casos de prueba: aprobado
fuente
Solo estoy lanzando esta respuesta allí, ya que resuelve un problema mío, se basa en la respuesta de @ stormy, pero incluye códigos de país de 3 dígitos y, lo que es más importante, se puede usar en cualquier lugar de una cadena, pero no coincidirá si no es precedido por un espacio / inicio de la cadena y terminando con un límite de palabra. Esto es útil para que no coincida con números aleatorios en medio de una URL o algo
fuente