2008-10-06 35 views
7

Tengo un formulario de sitio web que requiere una entrada de número de teléfono de EE. UU. Para fines de seguimiento, y esto es muy necesario en este caso. Quiero intentar eliminar a los usuarios que ingresan datos basura 330-000-0000. He visto algunas opciones de terceros que validan los números de teléfono para usted, sin embargo idk si esa es la mejor opción para esta situación. Sin embargo, si ha utilizado a alguno de estos terceros y puede hacer una recomendación que también sería muy apreciada aquí.Verificación del número de teléfono de EE. UU.

Sin embargo, estoy considerando verificar el número contra un conjunto de reglas para tratar de limitar los números de teléfono basura recibidos.

  • no un 555 número
  • no contiene 7 dígitos idénticos
  • del código de área válida (esto es fácilmente disponible)
  • no un 123-1234 o 123-4567
  • supongo que pude también cuente 867-5309 (je *)

¿esto resulta en cualesquiera situaciones que se puede pensar en que no permitiría que un usuario introduzca su phon ¿número? ¿Podría pensar en otras reglas que un número de teléfono no debería contener? ¿Algún otro pensamiento?

+0

Estoy * adivinando * (no es de los EE. UU.) Que está buscando la validación de los números de teléfono de EE. UU. Si necesita validación de número internacional también, sería más que un poco más complicado. – Rob

+0

Sí, haré esta edición gracias – Patcouch22

Respuesta

9

Me parece que estás poniendo más esfuerzo en esto de lo que merece. Considere:

Si su propósito es protegerse contra los números de teléfono introducidos incorrectamente, entonces probablemente pueda atrapar a más del 90% de ellos con solo un simple cheque.

Si su propósito es tratar de obligar a los usuarios a proporcionar un número válido, independientemente de si desean dar esa información o no, entonces ha asumido una tarea desesperada, incluso si pudo acceder al 100% de precisión, bases de datos de telecomunicaciones instantáneas para verificar que el número exacto ingresado esté actualmente en vigencia, aún no obtiene ninguna garantía de que el número que le dieron es el suyo. Una vez más, un simple chequeo frustrará a la mayoría de las personas que ingresan números falsos, pero aquellos que estén dispuestos a probar más de dos o tres veces tendrán y encontrarán una manera de vencer sus intentos de ganar sus números.

De cualquier manera, una simple prueba le dará buenos resultados y acceder a conjuntos de reglas más complejos tomará cada vez más tiempo y le proporcionará beneficios cada vez menores (mientras que potencialmente agrega falsos positivos, como ya se mostró con el "siete del mismo dígito" y 867-5309 casos).

1

867-5309 es un número de teléfono válido que se asigna a personas con códigos de área diferentes.

+0

Creo que fue una broma, amigo ... – TheSmurf

+0

También es ilegal vender su número si no le gusta (o comprarlo a otra persona) sin la intervención de la compañía telefónica. Hubo un tipo en Nueva York el año pasado que fue multado por hacerlo cuando trató de vender 867-5309 :) – warren

+0

Y esto explicaría la broma para nuestros lectores no estadounidenses y aquellos que no pueden recordar la década de 1980. http://en.wikipedia.org/wiki/Jenny_(867-5309) –

0

Si se ajusta solo a los números de formato de EE. UU. Y Canadá, creo que la siguiente expresión regular podría funcionar: [2-9] [0-9] [0-9] - [2-9] [ 0-9] [0-9] - [0-9] [0-9] [0-9] [0-9] &! [2-9] [0-9] [0-9] -555- [0-9] [0-9] [0-9] [0-9]

+0

todo lo que permite un número que comienza con 911 (o 411 para el caso) probablemente no es tan bueno – tloach

+0

Creo que hay otros * 11 números que hacen cosas. Consulte http://en.wikipedia.org/wiki/N11_code para obtener más información, pero creo que depende de su área. Sin embargo, el 911 y el 411 están por todos los Estados Unidos. –

0

También debe tener en cuenta la marcación de diez dígitos, que ahora se usa en algunas áreas: esto es diferente de long- marcación a distancia (es decir, 303-555-1234, en oposición a 1-303-555-1234). En algunos lugares, un número de teléfono válido tiene diez dígitos de longitud; en otros, es siete.

+0

solo para llamadas locales, e incluso cuando es 7 creo que puede usar los 10 dígitos completos – tloach

+0

No en todas partes. En Alberta (donde vivo), antes de cambiar a la marcación de 10 dígitos, al marcar los diez, se obtuvo una grabación que le indica que marque "1" primero para la distancia larga y luego una desconexión. – TheSmurf

2

Si puede verificar el código de área, entonces a menos que realmente, realmente necesite saber su número de teléfono, probablemente esté haciendo todo lo que es razonable.

+0

obviamente, también querrá verificar 10 dígitos, asumí que fue evidente. – tloach

3

Puede realizar la validación del número de teléfono internamente en su aplicación utilizando expresiones regulares. Dependiendo de su idioma, puede llamar a una función que devolverá verdadero si el número de teléfono suministrado coincide con la expresión.

En PHP:

function phone_number_is_valid($phone) { 
    return (eregi('^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$', $phone)); 
} 

Puede buscar diferentes expresiones regulares en línea. He encontrado el uno por encima de uno en http://regexlib.com/DisplayPatterns.aspx?categoryId=7&cattabindex=2

Editar: algunos sitios específicos de idioma para las expresiones regulares:

+0

+1. Gracias por el enlace a las expresiones de registro de C# para los números de teléfono. Funcionó perfectamente para mí –

0

Esos parámetros me parecen bastante buenos, también podría evitar números empezando con el 911 solo para estar seguro.

0

En mi investigación que debería haber hecho de antemano>. < Encontré que 7 dígitos idénticos son números de teléfono válidos. Entonces puedo contar esa regla.

+0

eh, no sabía que estaban permitidos ... buen hallazgo – chills42

2

Amybe eche un vistazo a las respuestas al this question.

+0

¡Excelente! no apareció en mi pregunta relacionada. – Patcouch22

1

Sus clientes todavía pueden hacer lo que yo hago, que es dar el número de moviefone local.

Además, 123-1234 o 123-4567 son solo números no válidos porque el prefijo comienza con un 1, pero 234-5678 o 234-1234 serían realmente válidos (aunque parece falso).

+0

No, el primero de los últimos 7 dígitos no puede ser 1 –

+0

Oh gracias, lo actualizaré – Kip

1

En Django hay un pequeño paquete contrib llamado localflavor que tiene muchos códigos de validación específicos del país, por ejemplo códigos postales o números de teléfono. También puede buscar en la fuente para ver cómo maneja django para el país que le gustaría usar; Por ejemplo: US Form validation. Este puede ser un gran recurso para obtener información sobre países de los que también conoce poco.

+0

Bonito reutilización de código. ;) –

0

Esta es una función rápida que uso (abajo). Tengo acceso a una base de datos de código postal que contiene datos de prefijo y código de área que se actualiza mensualmente. A menudo he pensado en hacer una inmersión de datos para confirmar que el prefijo existe para el código de área.

public static bool isPhone(string phoneNum) 
    { 
     Regex rxPhone1, rxPhone2; 

     rxPhone1 = new Regex(@"^\d{10,}$"); 
     rxPhone2 = new Regex(@"(\d)\1\1\1\1\1\1\1\1\1"); 

     if(phoneNum.Trim() == string.Empty) 
      return false; 

     if(phoneNum.Length != 10) 
      return false; 

     //Check to make sure the phone number has at least 10 digits 
     if (!rxPhone1.IsMatch(phoneNum)) 
      return false; 

     //Check for repeating characters (ex. 9999999999) 
     if (rxPhone2.IsMatch(phoneNum)) 
      return false; 

     //Make sure first digit is not 1 or zero 
     if(phoneNum.Substring(0,1) == "1" || phoneNum.Substring(0,1) == "0") 
      return false; 

     return true; 

    } 
0

No nkow si este es el lugar correcto, es una función de formato en lugar de una función de validación, pensé que vamos a compartir con la comunidad, tal vez un día será útil ..

Private Sub OnNumberChanged() 
    Dim sep = "-" 
    Dim num As String = Number.ToCharArray.Where(Function(c) Char.IsDigit(c)) _ 
               .ToArray 
    Dim ext As String = Nothing 
    If num.Length > 10 Then ext = num.Substring(10) 
    ext = If(IsNullOrEmpty(ext), "", " x" & ext) 
    _Number = Left(num, 3) & sep & Mid(num, 4, 3) & sep & Mid(num, 7, 4) & ext 
End Sub 

Mi función es la validación de este modo:

Public Shared Function ValidatePhoneNumber(ByVal number As String) 
    Return number IsNot Nothing AndAlso number.ToCharArray. _ 
            Where(Function(c) Char.IsNumber(c)).Count >= 10 
End Function 

me llaman a esta última función @ el OnNumberChanging (número As String) método de la entidad.

0

Para Estados Unidos y la validación de teléfono internacional encontré este código el más adecuado:

((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$ 

Usted puede encontrar una (aunque algo anticuado) here discusión.

Cuestiones relacionadas