什么'这个验证函数有问题

What's wrong with this validation function?

本文关键字:验证 函数 有问题 什么      更新时间:2023-09-26

我无法使用此正则表达式/^(?(''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);
    }
}

除了正则表达式的问题之外,您不能设置输入文件的innerHTML,因此

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;
}
<input id="phoneprompt" onchange="validatePhone()" />
<span id="phonepromptmsg"></span>
<br />
<input type="button" onclick="validatePhone()" value="Test"/>

您可以更改

/^'(?('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

Ref:与标准10位电话号码匹配的正则表达式