验证联系表单中的数字格式(javascript)

时间:2018-04-09 18:20:46

标签: javascript html css

我有一个功能来验证联系表格中的电话号码,但我需要能够输入" xxx xxx xxxx"例如,而不仅仅是" xxxxxxxx"

数字格式应为:

xxx xxx xxxx

XXX-XXX-XXXX

xxx.xxx.xxxx

  function validatePhone() {
    var phone = document.getElementById("phone").value;

    if (phone.length == 0) {
      var w = document.getElementById("phoneError").textContent;
      alert(w);
      return false;
    }

    if (phone.length != 10) {
      var r = document.getElementById("phoneError").textContent;
      alert(r);
      return false;
    }

    // THIS IS NOT WORKING
    if (
      !phone.match(/^[0-9]{10}$/) ||
      !phone.match(/^\d{3}-\d{3}-\d{4}$/) ||
      !phone.match(/^\d{3}.\d{3}.\d{4}$/)
    ) {
      var t = document.getElementById("phoneError").textContent;
      alert(t);
      return false;
    }
  }

1 个答案:

答案 0 :(得分:0)

两件事:首先,你要混合AND和OR:

if (
  !phone.match(/^[0-9]{10}$/) ||
  !phone.match(/^\d{3}-\d{3}-\d{4}$/) ||
  !phone.match(/^\d{3}.\d{3}.\d{4}$/)
) {

只要其中一个条件失败,它就会返回false(基本上总是这样)。当没有任何表达式匹配时,您希望应用此if,例如当他们都是false时。因此,您必须使用&&而不是||。不是AND而不是b而不是c。

第二:你的第三个正则表达式有点偏离:.表示"任何字符",所以这个正则表达式也匹配" 123x123y1234"。您需要使用反斜杠转义点:/^\d{3}\.\d{3}\.\d{4}$/

此外,您可以显着改进此代码。你有5个条件,可以一个处理(如果你想允许输入" 123.123 234",否则你将不得不使用3个正则表达式)。并且只是检查正则表达式是否与字符串匹配,您可能应该使用test()because it is just slightly faster(在您的情况下它不重要,但只是出于原则)。

您可以将代码缩减为:

if (/^\d{3}[\s-.]\d{3}[\s-.]\d{4}$/.test(document.getElementById("phone").value) === false) {
    alert (document.getElementById("phoneError").textContent);
    return false;
}