2016-04-23 26 views
0

"f + 11111111111"という値を入力しようとしましたが、エラーメッセージが表示されません。私はregex2の条件を削除しようとし、それが働いた。しかしどうして?それはAND条件です、なぜそれがOR演算子のように機能しますか?Javascript正規表現でエラーメッセージが表示されない

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はあなたの入力と一致し、if条件*(これは明らかにfalseと評価されます)で否定「!」を使用します*。誰もあなたがやろうとしていることを知っているわけではありません。 –

+0

@CasimiretHippolyteはい、ばかな間違い。休憩を取る必要があります。ありがとう。 UPD:あなたはすでに十分に助けています。 – kulan

+0

'!&'で '! 'を使うと、両方の式が' if'のブロックを入力するために一致しなくてはなりません。 1つだけが一致しない場合( 'true && false')、全体の結果はブロックをスキップして' false'になります。おそらく '!|'を '!'と代わりに使用したいでしょう( "*一致するかどうか、エラーを促す*")。 –

答えて

0

与えられた文字列f+11111111111に一致するので、全体の条件がfalseと評価さ/\D*(\d\D*){11}/gあなたの2番目の正規表現。 regexper.comを使用して正規表現を視覚化することができます。

私はあなたが何をしようとしているのかはわかりませんが、この文字列でさえも2番目の正規表現と一致していることに気付いています:'f+1dsadsadasda123131231dsdadai-094i-)@)#(@)_(#_!'これはあなたが望むものですか?

0

2番目の正規表現はすべて一致します。単一の正規表現で十分です。

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 
    }