这个验证功能有什么问题?

时间:2015-05-20 03:22:51

标签: javascript

我无法用这个正则表达式来验证电话号码/?(?(〜d {3)/)?[... / /]?(〜d {3})[。 - /]?(\ d {4})$ /;前三位数位于括号(xxx)xxx-xxxx中。我尝试使用if / else循环测试电话号码,但有些东西不起作用,我找不到我做错了什么。谢谢你的帮助。

function validatePhone() {
    var pNumber = document.getElementById("phoneprompt").value;
    var regex = /^\(?(\d{3})\)?[\.\.-\/]?(\d{3})[\.\-\/ ]?(\d{4})$/;

    if (regex.test(pNumber)) {
        document.getElementById("phoneprompt").innerHTML = "<img src=\"greencheck.png\" />";
        return (true);
    } else {
        document.getElementById("phoneprompt").innerHTML = "<img src=\"redcheck.png\" />&nbsp;Phone numbers must be in (xxx) xxx-xxxx format"; 
        return (false);
    }
}

2 个答案:

答案 0 :(得分:1)

除了正则表达式的问题,你不能设置输入字段的innerHTML,所以

&#13;
&#13;
function validatePhone() {
  var el = document.getElementById("phoneprompt"),
    pNumber = el.value,
    regex = /^\(?(\d{3})\)?\s?[\.\.-\/]?(\d{3})[\.\-\/ ]?(\d{4})$/,
    valid = regex.test(pNumber);

  if (valid) {
    document.getElementById("phonepromptmsg").innerHTML = "<img src=\"greencheck.png\" />";
  } else {
    document.getElementById("phonepromptmsg").innerHTML = "<img src=\"redcheck.png\" />&nbsp;Phone numbers must be in (xxx) xxx-xxxx format";
  }

  return valid;
}
&#13;
<input id="phoneprompt" onchange="validatePhone()" />
<span id="phonepromptmsg"></span>
<br />
<input type="button" onclick="validatePhone()" value="Test"/>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以更改

/^\(?(\d{3})\)?[\.\.-\/]?(\d{3})[\.\-\/ ]?(\d{4})$/

/^\(?(\d{3})\)?\s?[\.\.-\/]?(\d{3})[\.\-\/ ]?(\d{4})$/

以容纳可选地位于区号之后的空格,因此(xxx) xxx-xxxx(xxx)xxx-xxxx都将匹配。

但是,这里有一个更强大的10位数电话号码正则表达式,其中括号和短划线是可选的:

/^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/

这些都将匹配:

  

(123)456-7890
  (123)456-7890
  123-456-7890
  123 456 7890

参考:Regular expression to match standard 10 digit phone number