2010-07-15 97 views
6

Sé que hay un montón de ejemplos de expresiones regulares sobre cómo hacer coincidir ciertos tipos de números de teléfono. Para mi ejemplo, solo quiero permitir números y algunos caracteres especiales. Nuevamente estoy teniendo problemas para lograr esto.Regex - número de teléfono simple

números de teléfono que se debe permitir podría tomar estas formas

5555555555 
555-555-5555 
(555)5555555 
(555)-555-5555 
(555)555-5555 and so on 

Sólo quiero algo que le permitirá [0-9] y también los caracteres especiales '(', ')', y '-'

hasta ahora mi expresión se parece a esto

/^[0-9]*^[()-]*$/ 

sé que esto es un error, pero lógicamente yo creo que esto significa permitir o números 0-9 y permitir caracteres (,), y -.

+0

También recomendaría la búsqueda de los personajes. Y + ya que muchas veces esos dos se usan para ingresar códigos de país o simplemente un estilo diferente. Otra opción que he usado antes es simplemente quitar todos los dígitos que no sean y luego simplemente verificar los dígitos para la longitud correcta. Además, me alegra que estés haciendo esto. ¿Es tan molesto para muchos sitios web o programas que te fuerzan a un formato específico, cuando la computadora puede verificar fácilmente? – christophercotton

+0

posible duplicado de [Una expresión regular completa para la validación del número de teléfono] (http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) – Mark

Respuesta

4

Este partido lo que quiere números, (,) y -

/^[0-9()-]+$/ 
+0

¡Gracias! que funcionó – IamBanksy

+0

Para esto quiero permitir espacios y + signo m también. como +91 555 555 555. ¿Puede por favor sugerirme el bueno? – chandu

+0

Esto es casi lo que quiero, pero quiero aplicarlo para que termine con un número –

1

¿Por qué tienes un perro callejero ^ ahí? Creo que quisiste decir [()-] Esto realmente te hace tener que tener dos comienzos de cuerdas en la expresión regular, que nunca coincidirá.

También, \d es un buen atajo para [0-9]. Son exactamente lo mismo.

Además, esto solo coincidirá con un grupo de números, luego un grupo de ( o ) o -. Algo como: 1294819024()()()()()-----()- coincidiría. Creo que quieres que todo pueda repetirse, algo así como: ^(\d*[()-]*)*$. Ahora puedes hacer coincidir secuencias repetitivas de esto.

Ahora bien, es importante notar que anidado * suelen ser ineficientes, podemos darnos cuenta de que estamos sólo quieren para que coincida con cualquier dígito y la puntuacion que desee: [\d()-]*

+0

¿No significa que [^() -] NO coincida con esos caracteres? – christophercotton

+0

¡Sí! No estoy pensando bien ... –

5
^(\(\d{3}\)|\d{3})-?\d{3}-?\d{4}$ 
  • \(\d{3}\)|\d{3} tres dígitos con o sin () - La expresión regular más simple sería \(?\d{3}\)? pero que permitiría (555-5555555 y 555)5555555 etc.
  • Un opcional - seguido de tres dígitos
  • Un opcional - seguido de cuatro dígitos

Tenga en cuenta que este seguiría permitiendo 555555-5555 y 555-5555555 - No sé si éstos están cubiertos en su y así sucesivamente parte

+0

Gracias, es correcto, creo que mi pregunta no fue redactada correctamente. No necesité designar una longitud específica en los números para permitir números de teléfono extranjeros, etc. Sin embargo, gracias. – IamBanksy

0

Por dígitos que puede usar \d. Para más de un dígito, puede usar \d{n}, donde n es el número de dígitos que desea hacer coincidir. Se deben escapar algunos caracteres especiales, por ejemplo \( coincide con (. Por ejemplo: \(\d{3}\)\-\d{3}\-\d{4} coincidencias (555) -555-5555.

0

El segundo quilates (afaik) va a romper cualquier cosa que hagas, ya que significa "inicio de la secuencia".

Lo que parece estar pidiendo por tanto, es:

  • inicio de la cadena, seguido por ...
  • cualquier número de caracteres numéricos, seguido por ...
  • inicio de la cadena, seguido de ...
  • cualquier número de '(', ')', o '-' caracteres, seguido de ...
  • final de la cadena

Lo que no funcionará aunque ese segundo quilate no haga nada, porque no está contabilizando nada después de la primera '(', ')', o '-', y de hecho probablemente solo valide un vacío cadena si eso.

Quiere /^[0-9()-]+$/ para un patrón muy tosco que "funcionará".

0

Si usted está haciendo EEUU único número la mejor solución es que se deben eliminar todos los caracteres que no sean dígitos y luego simplemente prueba para ver si la longitud == 10.

Cuestiones relacionadas