Pregunta

Tengo un formulario de sitio web que requiere el ingreso de un 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 números de teléfono por usted, sin embargo, no sé si esa es la mejor opción para esta situación.Sin embargo, si alguna vez ha utilizado uno de estos terceros y puede hacer una recomendación, también sería muy apreciada aquí.

Sin embargo, estoy considerando comparar el número con un conjunto de reglas para intentar limitar los números de teléfono no deseados recibidos.

  • no es un número 555
  • no contiene 7 dígitos idénticos
  • código de área válido (está disponible)
  • no es 123-1234 o 123-4567
  • Supongo que también podría contar 867-5309 (je*)

¿Esto daría lugar a alguna situación que se le ocurra que no permitiría a un usuario ingresar su número de teléfono?¿Se te ocurre alguna otra regla que no debería contener un número de teléfono?¿Alguna otra idea?

¿Fue útil?

Solución

Me parece que estás poniendo en esto más esfuerzo del que merece.Considerar:

Si su propósito es protegerse contra números de teléfono ingresados ​​incorrectamente, entonces probablemente pueda detectar más del 90% de ellos con solo una verificación muy simple.

Si su propósito es tratar de obligar a los usuarios a proporcionar un número válido, ya sea que quieran dar esa información o no, entonces ha asumido una tarea inútil, incluso si pudiera acceder a números 100% precisos y actualizados. segunda base de datos de telecomunicaciones para verificar que el número exacto ingresado esté actualmente activo, aún no obtiene ninguna seguridad de que el número que le dieron sea el suyo.Una vez más, una simple comprobación frustrará a la mayoría de las personas que introducen números falsos, pero aquellos que estén dispuestos a intentarlo más de dos o tres veces voluntad Encuentra una manera de derrotar tus intentos de ganar sus números.

De cualquier manera, una prueba simple le dará buenos resultados y entrar en conjuntos de reglas más complejos le llevará cada vez más tiempo y le brindará cada vez menos beneficios (al mismo tiempo que potencialmente agregará falsos positivos, como ya se demostró con los "siete de los mismo dígito" y casos 867-5309).

Otros consejos

Puede validar el 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 un número de teléfono proporcionado 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. Encontré el anterior en http://regexlib.com/DisplayPatterns .aspx? categoryId = 7 & amp; cattabindex = 2

Editar: algunos sitios específicos de lenguaje para expresiones regulares:

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

Amybe echa un vistazo a las respuestas a esta pregunta .

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

En Django hay un pequeño paquete de contribución 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 mirar en la fuente para ver cómo django maneja esto para el país que le gustaría usar; Por ejemplo: Validación de formulario de EE. UU. . Este puede ser un gran recurso para obtener información sobre países que usted también conoce poco.

Sus clientes aún pueden hacer lo que yo hago, que es dar el número de móvil 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 válidos (aunque parezca falso).

Si solo utiliza números en 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] & Amp; ! [2-9] [0-9] [0-9] -555- [0-9] [0-9] [0-9] [0-9]

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

Esos parámetros me parecen bastante buenos, también podría evitar los números que comienzan con 911 solo para estar seguros.

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

Esta es una función rápida que uso (a continuación). 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 existe el prefijo 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;

    }

No sé si este es el lugar correcto, es una función de formato en lugar de una función de validación, pensé compartirlo con la comunidad, tal vez algún día sea ú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 de validación es así:

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

Llamo a esta última función @ el método OnNumberChanging (número como cadena) de la entidad.

Para la validación de teléfonos internacionales y de EE. UU., encontré este código más adecuado:

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

Puede encontrar una discusión (aunque algo anticuada) aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top