2016-04-23 11 views
0

Ich versuche, den folgenden Wert "f + 11111111111" eingeben, und mein Code zeigt keine Fehlermeldung. Ich habe versucht, Regex2 Zustand zu entfernen, und dann hat es funktioniert. Aber wie kommt es? Es ist eine UND-Bedingung, warum verhält es sich wie ein ODER-Operator?Javascript Regex gibt keine Fehlermeldung, wenn es sollte

function validatePhone() 
{ 
var phone = document.getElementById("phone").value; 

var regex1 =/^[\+\d][\s(\-\d][\s()\-\d]{8,}/g; 
var regex2 = /\D*(\d\D*){11}/g; 

    if (!phone.match(regex1) && !phone.match(regex2)) { 
     producePrompt("Error", "comment_phone_prompt"); 
     return false; 
    } 
} 

function producePrompt(message, promptLocation) 
{ 
    document.getElementById(promptLocation).innerHTML = message; 
} 
+1

regex2 passt auf Ihre Eingabe und Sie verwenden eine Negation '!' In der if-Bedingung * (die offensichtlich als falsch ausgewertet wird) *. Da niemand weiß, was Sie zu tun versuchen, ist es schwierig, Ihnen mehr zu helfen. –

+0

@CasimiretHippolyte ja, dummer Fehler. Müssen eine Pause machen. Vielen Dank. UPD: Du hast schon genug geholfen. – kulan

+0

Mit '&&' mit '!' Müssen beide Ausdrücke nicht übereinstimmen, um den 'if's Block einzugeben. Wenn nur einer nicht übereinstimmt ("true && false"), ist das Gesamtergebnis "false" und der Block wird übersprungen. Sie möchten wahrscheinlich '||' stattdessen mit '!' Verwenden ("* wenn beide nicht übereinstimmen, wird ein Fehler * angezeigt"). –

Antwort

0

Ihr zweiter regulärer Ausdruck /\D*(\d\D*){11}/g entspricht den angegebenen String f+11111111111 und damit die ganze Bedingung des Ergebnis false. Sie können Ihre regulären Ausdrücke mit regexper.com visualisieren.

Ich bin nicht sicher, was Sie tun möchten, aber bedenken Sie, dass auch diese Zeichenfolge der zweiten Regex entspricht: 'f+1dsadsadasda123131231dsdadai-094i-)@)#(@)_(#_!' Ist das, was Sie wollen?

0

Zweite Regex passt zu allem. Single Regex ist genug.

function validatePhone() { 
     var phone = document.getElementById("phone").value; 

     var regex1 = /^(\+\d)?(\(|-)?\d{3}(\)|-)?\d{3}-?\d{4}$/; 
     //match +1-800-123-45678, (555)123-4567, and so on 
     if (!regex1.test(phone)){ 
      producePrompt("Error", "comment_phone_prompt"); 
      return false; 
     } 
     return true;//both sides should return 
    } 
Verwandte Themen