Pergunta

Eu tenho um formulário de site que requer uma entrada de número de telefone dos EUA para fins de acompanhamento, e isso é muito necessário neste caso. Eu quero tentar eliminar os usuários que entram em dados lixo 330-000-0000. Vi algumas opções de terceiros que validam números de telefone para você, no entanto, o IDK se essa for a melhor opção para essa situação. No entanto, se você usou um desses terceiros e pode fazer uma recomendação que também seria muito apreciada aqui.

No entanto, estou pensando em verificar o número em um conjunto de regras para tentar restringir os números de telefone lixo recebidos.

  • Não é um número 555
  • não contém 7 dígitos idênticos
  • Código de área válido (isso está prontamente disponível)
  • não um 123-1234 ou 123-4567
  • Eu acho que também poderia contar 867-5309 (heh*)

Isso resultaria em quaisquer situações que você possa pensar que não permitiria que um usuário insira o número de telefone? Você poderia pensar em outras regras que um número de telefone não deve conter? Algum outro pensamento?

Foi útil?

Solução

Parece -me que você está colocando mais esforço nisso do que merece. Considerar:

Se o seu objetivo é se proteger contra números de telefone incorretos, você provavelmente poderá pegar mais de 90% deles com apenas uma verificação muito simples.

Se o seu objetivo é tentar forçar os usuários a fornecer um número válido, quer queira fornecer essas informações ou não, você assumiu uma tarefa sem esperança- mesmo que você pudesse acessar 100% preciso, atualizado Os bancos de dados de telecomunicações de segundo para verificar se o número exato inserido está atualmente ao vivo, você ainda não tem garantia de que o número que eles lhe deram é deles. Mais uma vez, um cheque simples frustrará a maioria das pessoas que entram em números falsos, mas aqueles que estão dispostos a tentar mais de duas ou três vezes vai Encontre uma maneira de derrotar suas tentativas de ganhar seus números.

De qualquer maneira, um teste simples lhe dará bons resultados e entrar em conjuntos de regras mais complexos levarão cada vez mais tempo, proporcionando cada vez mais pouco benefício para você (além de potencialmente adicionar falsos positivos, como já mostrado com os "sete dos sete dos Mesmo dígito "e 867-5309 casos).

Outras dicas

Você pode fazer validação de número de telefone internamente em seu aplicativo usando expressões regulares. Dependendo do seu idioma, você pode chamar uma função que retornará verdadeira se um número de telefone fornecido corresponder à expressão.

Em PHP:

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

Você pode procurar diferentes expressões regulares online. Eu encontrei o acima em http://regexlib.com/displaypatterns.aspx?categoryid=7&cattabindex=2

Editar: alguns sites específicos de idiomas para expressões regulares:

Se você pode verificar o código da área, a menos que você sério sério Precisa saber o número de telefone deles que você provavelmente está fazendo o quanto é razoável.

Amybe dê uma olhada nas respostas para essa questão.

867-5309 é um número de telefone válido atribuído a pessoas em diferentes códigos de área.

Em Django, há um pequeno pacote de contributo chamado LocalFavor, que possui muito código de validação específico do país, por exemplo, códigos postais ou números de telefone. Você pode olhar na fonte também ver como o Django lida com eles para o país que você gostaria de usar; Por exemplo: Validação dos formulários dos EUA. Isso pode ser um ótimo recurso para obter informações sobre países que você conhece pouco.

Seus clientes ainda podem fazer o que eu faço, o que é fornecer o número de Moviene local.

Além disso, 123-1234 ou 123-4567 são apenas números inválidos porque o prefixo começa com 1, mas 234-5678 ou 234-1234 seria realmente válido (embora pareça falso).

Se você está continuando apenas números de formato de EUA e Canadá, acho que o seguinte Regex pode 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

Você também precisa levar em consideração a discagem de dez dígitos, que é usada em algumas áreas agora: isso é diferente da discagem de longa distância (ou seja, 303-555-1234, em oposição a 1-303-555-1234). Em alguns lugares, um número de telefone válido tem dez dígitos; Em outros, são sete.

Esses parâmetros parecem muito bons para mim, eu também posso evitar números começando com o 911 apenas para estar seguro.

Em minha pesquisa, eu deveria ter feito de antemão>. <Descobri que 7 dígitos idênticos são números de telefone válidos. Então, eu posso contar essa regra.

Esta é uma função rápida que eu uso (abaixo). Eu tenho acesso a um banco de dados ZIPCode que contém dados de código e prefixo que são atualizados mensalmente. Muitas vezes pensei em fazer um mergulho de dados para confirmar que o prefixo existe para o código da á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;

    }

Eu não nkow, se este é o lugar certo, é uma função de formatação e não uma função de validação, pensei que vamos compartilhá -la com a comunidade, talvez um dia seja ú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

Minha função de validação é assim:

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

Eu chamo essa última função @ o método onNumberChanging (número como string) da entidade.

Para nós e a validação de telefone internacional, achei este código o mais adequado:

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

Você pode encontrar uma discussão (embora um pouco datada) aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top