2008-10-06 12 views
7

Ich habe ein Website-Formular, das eine US-Telefonnummer Eingabe für Folgezwecke erfordert, und das ist in diesem Fall sehr notwendig. Ich möchte versuchen, Benutzer zu beseitigen, die Junk-Daten eingeben 330-000-0000. Ich habe einige Optionen von Drittanbietern gesehen, die Telefonnummern für Sie validieren, jedoch idk, wenn das die beste Option für diese Situation ist. Wenn Sie jedoch einen dieser Dritten benutzt haben und eine Empfehlung abgeben können, die auch hier sehr geschätzt wird.US Telefonnummer Verifikation

Allerdings erwäge ich, die Nummer gegen eine Reihe von Regeln zu überprüfen, nur um zu versuchen, die empfangenen Junk-Telefonnummern einzugrenzen.

  • keine 555-Nummer
  • nicht 7 identische Ziffern enthalten
  • gültige Ortsvorwahl (das leicht verfügbar ist)
  • keine 123-1234 oder 123-4567
  • Ich glaube, ich könnte auszählen auch 867-5309 (heh *)

wäre das Ergebnis in allen Situationen, die Sie, dass kein Benutzer ihre phon eingeben erlauben würde denken e Nummer? Können Sie sich weitere Regeln vorstellen, die eine Telefonnummer nicht enthalten sollte? Irgendwelche anderen Gedanken?

+0

Ich rate * (nicht aus den USA), dass Sie nach Valiation für US-Telefonnummern suchen. Wenn Sie auch eine internationale Zahlenvalidierung benötigen, wäre das mehr als nur ein bisschen komplizierter. – Rob

+0

Ja, ich werde diese Bearbeitung dank – Patcouch22

Antwort

9

Es scheint mir, dass Sie mehr Mühe in diese setzen sind, als es garantiert. Bedenken Sie:

Wenn Ihr Zweck gegen Fehl eingegebene Telefonnummern zu schützen ist, dann können Sie wahrscheinlich fangen weit über 90% von ihnen mit nur eine sehr einfachen Prüfung.

Wenn Sie versuchen, Benutzer zu zwingen, eine gültige Nummer anzugeben, ob sie diese Informationen weitergeben möchten oder nicht, dann haben Sie eine hoffnungslose Aufgabe übernommen - selbst wenn Sie auf 100% genau zugreifen konnten, sekundengenaue Telco-Datenbanken, um zu verifizieren, dass die eingegebene genaue Nummer derzeit live ist, erhalten Sie immer noch keine Gewissheit, dass die von Ihnen angegebene Nummer ihre eigene ist. Noch einmal, ein einfacher Scheck wird die Mehrheit der Menschen, die falsche Zahlen eingeben, vereiteln, aber diejenigen, die bereit sind, mehr als zwei oder drei Mal zu versuchen, finden einen Weg, um Ihre Versuche zu besiegen, ihre Zahlen zu gewinnen.

So oder so, ein einfacher Test wird Ihnen gute Ergebnisse bringen, und komplexere Regelwerke werden immer mehr Zeit in Anspruch nehmen, während Sie immer weniger Nutzen bringen (möglicherweise auch False Positives, wie bereits im "Sieben der gleichen Ziffer" und 867-5309 Fälle).

1

867-5309 ist eine gültige Telefonnummer, die Personen in verschiedenen Vorwahlbereichen zugewiesen ist.

+0

machen Ich denke, das war ein Witz, Alter ... – TheSmurf

+0

Es ist auch illegal, Ihre Nummer zu verkaufen, wenn Sie es nicht mögen (oder es von jemand anderem kaufen) ohne Intervention von der Telefongesellschaft. Es gab einen Kerl in NYC letztes Jahr, der dafür bestraft wurde, als er versuchte, 867-5309 zu verkaufen :) – warren

+0

Und das würde den Witz für unsere Nicht-US-Leser erklären und jene, die sich nicht an die 80er Jahre erinnern können. http://en.wikipedia.org/wiki/Jenny_(867-5309) –

0

Wenn Sie nur mit US- und Kanada-Format Zahlen bleiben, denke ich, dass die folgende Regex funktioniert: [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

alles, was eine Zahl beginnend mit 911 (oder 411 für die Angelegenheit) erlaubt ist wahrscheinlich nicht so toll – tloach

+0

Ich glaube, es gibt andere * 11 Zahlen, die Dinge tun. Siehe http://en.wikipedia.org/wiki/N11_code für weitere Informationen, aber ich denke, es hängt von Ihrer Region ab. 911 und 411 sind jedoch fast überall in den USA. –

0

Sie müssen auch die zehnstellige Wahl berücksichtigen, die jetzt in einigen Bereichen verwendet wird: das unterscheidet sich von lang- Fernwahl (dh 303-555-1234, im Gegensatz zu 1-303-555-1234). An manchen Orten ist eine gültige Telefonnummer zehn Ziffern lang; in anderen ist es sieben.

+0

nur für Ortsgespräche, und sogar wo es 7 ist Ich glaube, dass Sie die vollen 10 Ziffern verwenden können – tloach

+0

Nicht überall. In Alberta (wo ich wohne), vor dem Umschalten auf 10-stelliges Wählen, führte das Wählen aller zehn zu einer Aufzeichnung, in der mir mitgeteilt wurde, zuerst "1" für eine lange Entfernung und dann eine Trennung zu wählen. – TheSmurf

2

Wenn Sie die Vorwahl bestätigen können, wenn Sie wirklich, wirklich brauchen, um ihre Telefonnummer zu wissen, tun Sie wahrscheinlich so viel wie vernünftig ist.

+0

Offensichtlich würden Sie auch 10 Ziffern verifizieren wollen, ich nahm an, dass das selbstverständlich war. – tloach

3

Sie können die Telefonnummernüberprüfung intern in Ihrer App mithilfe von regulären Ausdrücken durchführen. Abhängig von Ihrer Sprache können Sie eine Funktion aufrufen, die true zurückgibt, wenn eine angegebene Telefonnummer mit dem Ausdruck übereinstimmt.

In PHP:

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

Sie können online verschiedene reguläre Ausdrücke nachzuschlagen. Ich fand das eine über ein bei http://regexlib.com/DisplayPatterns.aspx?categoryId=7&cattabindex=2

Edit: Einige sprachspezifische Websites für reguläre Ausdrücke:

+0

+1. Danke für den Link zu C# reg-Ausdrücken für Telefonnummern. Arbeitete perfekt für mich. –

0

Diese Parameter sehen für mich ziemlich gut aus, ich könnte auch Nummern vermeiden, die mit 911 beginnen, nur um sicher zu sein.

0

Bei meiner Recherche hätte ich das vorher tun sollen>. < Ich habe festgestellt, dass 7 identische Ziffern gültige Telefonnummern sind. Also kann ich diese Regel auszählen.

+0

huh, wusste nicht, dass das erlaubt war ... nice find – chills42

2

nehmen Amybe einen Blick auf die Antworten auf this question.

+0

Ausgezeichnet! kam in meiner verwandten Frage nicht auf. – Patcouch22

1

können Ihre Kunden noch tun, was ich tun, was die lokale Moviefone Nummer geben ist.

Auch 123-1234 oder 123-4567 sind nur ungültige Zahlen, da das Präfix mit einer 1 beginnt, aber 234-5678 oder 234-1234 wäre eigentlich gültig (obwohl es gefälscht aussieht).

+0

Nein, die erste der letzten 7 Ziffern kann nicht sein 1 –

+0

Oh danke, ich werde es aktualisieren – Kip

1

In Django gibt es ein nettes kleine contrib Paket namens localflavor weicht viele länderspezifische Validierungscode hat, beispielsweise Postleitzahlen oder Telefonnummern. Sie können auch in der Quelle nachschauen, wie Django diese für das Land behandelt, das Sie verwenden möchten; Zum Beispiel: US Form validation. Dies kann ein großer Rückgriff auf Informationen über Länder sein, von denen Sie wenig wissen.

+0

Nice Code wiederverwenden. ;) –

0

Dies ist eine kurze Funktion, die ich (unten) verwenden. Ich habe Zugang zu einer Postleitzahlen-Datenbank, die Orts- und Präfixdaten enthält, die monatlich aktualisiert werden. Ich habe oft darüber nachgedacht, einen Daten-Dip durchzuführen, um zu bestätigen, dass das Präfix für die Vorwahl existiert.

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

ich nkow nicht, ob dies der richtige Ort ist, es ist eine Formatierungsfunktion eher als eine Validierungsfunktion, dachte ich, ist es mit der Community teilen lassen, vielleicht eines Tages nützlich sein ..

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 

Meine Validierungsfunktion ist etwa so:

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 

ich nenne diese letzte Funktion @ the OnNumberChanging (Anzahl As String) -Methode des Unternehmens steht.

0

Für US und internationale Telefonvalidierung ich diesen Code gefunden am besten geeignet:

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

Sie können here eine (wenn auch etwas veraltet) Diskussion finden.