2008-10-06 7 views
7

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

Cependant, j'envisage de vérifier le nombre par rapport à un ensemble de règles pour essayer simplement d'affiner les numéros de téléphone indésirables reçus.

  • pas un 555 nombre
  • ne contient pas 7 chiffres identiques
  • code régional valide (ce qui est facilement disponible)
  • pas 123-1234 ou 123-4567
  • Je suppose que je pouvais aussi compter sur 867-5309 (heh *)

Est-ce que ce résultat dans toutes les situations que vous pouvez penser à cela ne permettrait pas à un utilisateur d'entrer dans leur phon e numéro? Pouvez-vous penser à d'autres règles qu'un numéro de téléphone ne devrait pas contenir? D'autres pensées? 865-5309

+0

Je suppose * (n'étant pas originaire des États-Unis) que vous recherchez une valeur pour les numéros de téléphone américains. Si vous avez besoin d'une validation internationale des numéros, ce serait plus compliqué. – Rob

+0

Oui je vais faire ce montage merci – Patcouch22

Répondre

9

Il me semble que vous y consacrez plus d'efforts que cela ne le justifie. Considérez:

Si votre but est de vous prémunir contre les numéros de téléphone mal saisis, vous pouvez probablement en capturer plus de 90% avec un simple contrôle. Si votre but est d'essayer de forcer les utilisateurs à fournir un nombre valide, qu'ils souhaitent ou non donner cette information, alors vous avez pris une tâche sans espoir - même si vous étiez capable d'accéder à 100% précis, les bases de données de télécommunications de la deuxième à la seconde pour vérifier que le nombre exact entré est actuellement en ligne, vous n'avez toujours pas l'assurance que le numéro qu'ils vous ont donné est le leur. Encore une fois, une simple vérification empêchera la majorité des gens d'entrer des chiffres bidon, mais ceux qui sont prêts à essayer plus de deux ou trois fois trouveront un moyen de vaincre vos tentatives pour obtenir leurs numéros. De toute façon, un test simple va vous donner de bons résultats et entrer dans des ensembles de règles plus complexes prendra de plus en plus de temps tout en vous procurant un bénéfice de plus en plus faible (tout en ajoutant potentiellement des faux positifs, "sept du même chiffre" et 867-5309 cas).

1

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

+0

Je pense que c'était une blague, mec ... – TheSmurf

+0

Il est également illégal de vendre votre numéro si vous ne l'aimez pas (ou l'acheter à quelqu'un d'autre) sans intervention de la compagnie de téléphone. Il y avait un gars à NYC l'année dernière qui a été condamné à une amende pour le faire quand il a essayé de vendre 867-5309 :) – warren

+0

Et cela expliquerait la blague pour nos lecteurs non américains et ceux qui ne peuvent se souvenir des années 1980. http://en.wikipedia.org/wiki/Jenny_(867-5309) –

0

Si vous ne conservez que des numéros au format US et Canada, je pense que l'expression régulière suivante pourrait fonctionner: [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

tout ce qui permet un nombre commençant par 911 (ou 411 d'ailleurs) n'est probablement pas si grand – tloach

+0

Je crois qu'il y a d'autres * 11 nombres qui font des choses. Voir http://en.wikipedia.org/wiki/N11_code pour plus d'informations, mais je pense que cela dépend de votre région. 911 et 411 sont à peu près partout aux États-Unis, cependant. –

0

Vous devez également prendre en compte la numérotation à dix chiffres, qui est actuellement utilisée dans certaines régions: elle est différente de la numérotation longue. numérotation à distance (c.-à-d. 303-555-1234, par opposition à 1-303-555-1234). Dans certains endroits, un numéro de téléphone valide comporte dix chiffres; dans d'autres, il y en a sept.

+0

seulement pour les appels locaux, et même où il est 7 Je crois que vous pouvez utiliser les 10 chiffres complets – tloach

+0

Pas partout. En Alberta (où j'habite), avant de passer à la composition à 10 chiffres, composer les dix numéros a entraîné un enregistrement vous demandant de composer d'abord le «1» pour une longue distance, puis une déconnexion. – TheSmurf

2

Si vous pouvez vérifier l'indicatif régional, à moins que vous ne connaissiez vraiment, vraiment besoin de connaître leur numéro de téléphone, vous faites probablement autant que ce qui est raisonnable.

+0

évidemment, vous voudriez également vérifier 10 chiffres, j'ai supposé que cela allait de soi. – tloach

3

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 retournera vrai 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 consulter les différentes expressions régulières en ligne. J'ai trouvé celui ci-dessus un à http://regexlib.com/DisplayPatterns.aspx?categoryId=7&cattabindex=2

Edit: Certaines langues des sites spécifiques pour les expressions régulières:

+0

+1. Merci pour le lien vers les expressions reg C# pour les numéros de téléphone. Travaillé parfaitement pour moi. –

0

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

0

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.

+0

hein, ne savait pas ceux qui étaient autorisés ... belle trouvaille – chills42

2

Amybe jette un coup d'oeil aux réponses à this question.

+0

Excellent! n'est pas venu dans ma question connexe. – Patcouch22

1

Vos clients peuvent toujours faire ce que je fais, c'est-à-dire donner le numéro de moviefone local. De plus, 123-1234 ou 123-4567 sont seulement des nombres non valides car le préfixe commence par un 1, mais 234-5678 ou 234-1234 serait réellement valide (bien que cela semble faux).

+0

Non, le premier des 7 derniers chiffres ne peut pas être 1 –

+0

Oh merci, je vais le mettre à jour – Kip

1

Dans Django, il y a un petit paquet contrib appelé localflavor qui a beaucoup de code de validation spécifique au pays, par exemple des codes postaux ou des numéros de téléphone. Vous pouvez regarder dans la source aussi voir comment django gère ces pour le pays que vous souhaitez utiliser; Par exemple: US Form validation. Cela peut être un grand recours pour des informations sur des pays que vous connaissez peu.

+0

Réutilisation du code Nice. ;) –

0

C'est une fonction rapide que j'utilise (ci-dessous). J'ai accès à une base de données de codes postaux qui contient des données de code régional et de préfixe qui sont mises à jour tous les mois. J'ai souvent pensé à faire un plongeon de 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; 

    } 
0

Je ne nkow si tel est le bon endroit, il est une fonction de mise en forme plutôt que d'une fonction de validation, je pensais que nous allons partager avec la communauté, peut-être un jour, il sera 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 comme ceci:

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 @ le OnNumberChanging (nombre As String) méthode de l'entité.

0

Pour Etats-Unis et la validation internationale de téléphone, 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 un (quoique un peu daté) here discussion.

Questions connexes