Question

J'ai un formulaire de site Web qui nécessite la saisie d'un numéro de téléphone américain aux fins de suivi, ce qui est très nécessaire dans ce cas. Je veux essayer d’éliminer les utilisateurs qui saisissent des données indésirables 330-000-0000 . J'ai vu certaines options de tiers qui valident des numéros de téléphone pour vous, mais idk si c'est la meilleure option pour cette situation. Toutefois, si vous avez tous utilisé l'un de ces tiers et que vous pouvez faire une recommandation, celle-ci serait également grandement appréciée ici.

Toutefois, j’envisage de comparer le numéro à un ensemble de règles afin de limiter les numéros de téléphone indésirables reçus.

  • n'est pas un numéro 555
  • ne contient pas 7 chiffres identiques
  • indicatif régional valide (disponible immédiatement)
  • pas 123-1234 ou 123-4567
  • Je suppose que je pourrais aussi compter 867-5309 ( * )

Est-ce que cela entraînerait des situations auxquelles vous pourriez penser et qui ne permettraient pas à un utilisateur d'entrer son numéro de téléphone? Pourriez-vous penser à d'autres règles qu'un numéro de téléphone ne devrait pas contenir? Avez-vous d'autres idées?

Était-ce utile?

La solution

Il me semble que vous faites plus d’efforts qu’il n’est justifié. Considérez:

Si votre objectif est de vous protéger des numéros de téléphone saisis de manière erronée, vous pouvez probablement en détecter plus de 90% en effectuant un simple contrôle.

Si votre but est d'essayer de forcer les utilisateurs à fournir un numéro valide, qu'ils souhaitent ou non donner ces informations, vous vous engagez dans une tâche sans espoir - même si vous avez pu accéder à 100% de précision, jusqu'à -à-la-seconde bases de données telco pour vérifier que le nombre exact entré est actuellement actif, vous n’obtenez toujours aucune assurance que le numéro qu’elles vous ont attribué est le leur. Encore une fois, une simple vérification empêchera la majorité des personnes d'entrer des chiffres fictifs, mais ceux qui sont disposés à essayer plus de deux ou trois fois trouveront un moyen de faire échec à vos tentatives de gagner leur numéro.

De toute façon, un simple test va vous donner de bons résultats et aller dans des jeux de règles plus complexes prendra de plus en plus de temps tout en vous apportant de moins en moins d’avantages (tout en ajoutant potentiellement des faux positifs, comme le montre déjà le < !> "; sept du même chiffre &"; et 867-5309 cas).

Autres conseils

Vous pouvez effectuer la validation du numéro de téléphone en interne dans votre application à l'aide d'expressions régulières. Selon votre langue, vous pouvez appeler une fonction qui renvoie true si un numéro de téléphone fourni correspond à l'expression.

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));
}

Vous pouvez rechercher différentes expressions régulières en ligne. J'ai trouvé celui ci-dessus à l'adresse http://regexlib.com/DisplayPatterns .aspx? categoryId = 7 & amp; cattabindex = 2

Modifier: certains sites spécifiques aux langues pour les expressions régulières:

Si vous pouvez vérifier l'indicatif régional, à moins que vous vraiment, vraiment ayez besoin de connaître leur numéro de téléphone, vous en ferez probablement autant que vous en aurez envie.

Amybe examine les réponses à la question .

867-5309 est un numéro de téléphone valide attribué à des personnes appartenant à des indicatifs régionaux différents.

Django contient un joli petit paquet contrib appelé localflavor qui contient beaucoup de codes de validation spécifiques à chaque pays, par exemple des codes postaux ou des numéros de téléphone. Vous pouvez aussi regarder dans les sources pour voir comment django les gère pour le pays que vous souhaitez utiliser. Par exemple: validation de formulaire par les États-Unis . Cela peut constituer un excellent recours pour obtenir des informations sur des pays que vous connaissez peu également.

Vos clients peuvent toujours faire ce que je fais, à savoir leur donner le numéro de moviefone local.

De plus, 123-1234 ou 123-4567 ne sont que des nombres invalides, car le préfixe commence par un 1, mais 234-5678 ou 234-1234 serait en fait valide (même s’il semble faux).

Si vous vous en tenez uniquement aux numéros américains et canadiens, je pense que la regex suivante pourrait fonctionner: [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]

Vous devez également prendre en compte la composition à dix chiffres, qui est utilisée dans certaines régions: elle diffère de la composition longue distance (par exemple, le 303-555-1234, par opposition au 1-303-555-1234. ). À certains endroits, un numéro de téléphone valide est composé de dix chiffres; dans d’autres, il est sept heures.

Ces paramètres me semblent intéressants, mais je pourrais aussi éviter les numéros commençant par 911 juste pour être sûr.

Dans mes recherches que j'aurais dû faire auparavant >. < J'ai trouvé que 7 chiffres identiques sont des numéros de téléphone valides. Je peux donc compter cette règle.

C’est une fonction rapide que j’utilise (ci-dessous). J'ai accès à une base de données de codes postaux contenant des données de code régional et de préfixe mises à jour mensuellement. J'ai souvent pensé faire un plongeon dans les données pour confirmer que le préfixe existe pour l'indicatif régional.

    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;

    }

Je ne sais pas si c'est le bon endroit, c'est une fonction de formatage plutôt qu'une fonction de validation, je pensais la partager avec la communauté, peut-être qu'un jour ce serait utile.

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

Ma fonction de validation est la suivante:

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

J'appelle cette dernière fonction @ la méthode OnNumberChanging (number As String) de l'entité.

Pour la validation téléphonique américaine et internationale, j'ai trouvé ce code le plus approprié:

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

Vous pouvez trouver une discussion (quoique quelque peu datée) ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top