2010-03-05 16 views
11

Ich muss eine Telefonnummer in Javascript validieren. Die Anforderungen sind:Javascript Telefonnummer Validierung

sie 10 Stellen sein sollte, kein Komma, keine Striche, nur die Zahlen, und nicht die 1+ vor

das ist, was ich bisher geschrieben

function validatePhone(field,alerttxt) { 
    with (field) { 
     if(value.length > 10) { 
      alert(alerttext); 
      return false; 
     } 
     for(i = 0; i < value.length; i++) { 
      if(parseInt(value[i]) == NaN) { 
       alert(alerttxt); 
       return false; 
      } 
     } 
     return true; 
    } 
} 
function validateForm(thisform) { 
     if (validatePhone(phone,"Invalid phone number")==false) { 
      phone.focus(); 
      return false; 
     } 

    } 
} 
    <form action="post.php" method="post" id="contactform" onsubmit="return validateForm(this)"> 
    <ol> 
     <label for="phone">Your phone <span class="red"></span></label> 
     <input id="phone" name="phone" class="text" /> 
     </li> 
    </ol> 
    </form> 

aber offensichtlich funktioniert es nicht. Wie kann ich die validatePhone() Funktion schreiben, so dass es funktioniert?

+6

Was für ein unfreundliches System. Lassen Sie die Leute Leerzeichen und Bindestriche eingeben und ignorieren Sie sie dann. Und was ist mit internationalen Telefonnummern? – Quentin

+0

Das sieht wie eine Schulaufgabe aus. Für eine ernsthafte Verwendung sollten Sie * keine regulären Ausdrücke verwenden, um [Telefonnummern richtig zu überprüfen] (http://stackoverflow.com/a/4338544/1269037). –

+0

@DanDascalescu Eigentlich war es zu dieser Zeit keine Schule. Nur ein beschissener Job auf RentACoder –

Antwort

29
phone = phone.replace(/[^0-9]/g, ''); 
if(phone.length != 10) { 
    alert("not 10 digits"); 
} else { 
    alert("yep, its 10 digits"); 
} 

Dies wird validieren und/oder auf Basis Ihrer Anforderungen korrigieren, alle Nicht-Ziffern zu entfernen.

+1

Warum nicht einfach nur passen? – Marius

+5

wie ich sagte "validieren und/oder korrigieren" ist, warum nicht nur übereinstimmen. Seine ziemlich schlechte Benutzererfahrung, um jemanden zu zwingen, eine Telefonnummer ohne Leerzeichen oder Bindestriche einzugeben, wenn sie so einfach zu entfernen sind. – Erik

+0

danke, ich mag den korrigierenden Regex wirklich :-) –

0

feste Funktion:

function validateForm(thisform) { 
     if (validatePhone(thisform.phone,"Invalid phone number")==false) { 
      thisform.phone.focus(); 
      return false; 
     } 
     return true; 
} 
+0

Ich habe vergessen, mit (thisform) am Anfang der Funktion zu enthalten, aber eigentlich habe ich es geschrieben) –

+1

Aber Sie haben auch extra "}" Symbol – antyrat

7

könnten Sie reguläre Ausdrücke verwenden:

function validatePhone(field, alerttext) { 
    if (field.match(/^\d{10}/)) { 
     return true; 
    } 
    alert(alerttext); 
    return false; 
} 
+0

Sie * sollten * in der Tat keine regulären Ausdrücke verwenden, um [Telefonnummern richtig zu überprüfen] (http://stackoverflow.com/a/4338544/1269037). –

+0

Seine Anforderung besagt, dass er ohne weiteres auf ein 10-stelliges Format prüfen soll. Also sollte diese regelmäßige Ausdrucksprüfung in Ordnung sein. Sie haben Recht: Ich mag keine Anwendungen, die mich in ein bestimmtes Telefonnummernformat zwingen. Ein Check für die minimale Länge, für Zahlen und einige() - +/Zeichen in beliebiger Reihenfolge kann in Ordnung sein, wie in: '^ [0-9() +/-] {5,} $' – arnep

1

-Code nur Zahlen Klammern und Bindestriche

function DoValidatePhone() { 
    var frm = document.forms['editMemberForm'];     
    var stripped = frm.contact.value; 
    var isGoodMatch = stripped.match(/^[0-9\s(-)]*$/); 
    if (!isGoodMatch) { 
     alert("The Emergency Contact number contains invalid characters." + stripped); 
     return false; 
    } 
} 
10

Googles libphonenumber auszunehmen ist sehr hilfreich für die Validierung und Formatierung von Telefonnummern in der ganzen Welt. Es ist einfacher, weniger kryptisch und robuster als die Verwendung einer RegEx, und es kommt in JavaScript, Ruby, Python, C#, PHP und Objective-C Aromen.

+1

* This *. Die Leute scheinen einfach nicht zu verstehen, dass [reguläre Ausdrücke naive Lösungen sind] (http://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links/21925491#21925491), wenn es darum geht um reale Daten zu validieren. –

-1
function validate(phoneString){ 

    reg = /^([+|\d])+([\s|\d])+([\d])$/; 

    return reg.test(phoneString); 

}