2016-04-23 102 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 
    }