2016-04-23 100 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'的塊。當只有一個不匹配時('true && false'),總體結果爲'false',跳過塊。你可能想用'||'代替(「*如果不匹配,提示錯誤*」)。 –

回答

0

你的第二個正則表達式/\D*(\d\D*){11}/g給定的字符串匹配f+11111111111,因此整體條件評估爲false。您可以使用regexper.com可視化您的正則表達式。

我不確定你在做什麼,但是請記住,即使這個字符串是由第二個正則表達式匹配的:'f+1dsadsadasda123131231dsdadai-094i-)@)#(@)_(#_!'這是你想要的嗎?

0

第二個正則表達式匹配所有的東西。單一的正則表達式就夠了。

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 
    }