使用javascript验证电话号码

IT技术 javascript regex validation
2021-03-02 07:45:38

我正在尝试验证电话号码,例如123-345-3456(078)789-8908使用 JavaScript。这是我的代码

function ValidateUSPhoneNumber(phoneNumber) {
  var regExp = /^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}/;
  var phone = phoneNumber.match(regExp);
  if (phone) {
    alert('yes');
    return true;
  }
  alert('no');
  return false;
}

我正在测试使用ValidateUSPhoneNumber('123-345-34567')在最后一个连字符前有 5 位数字的函数,根据正则表达式无效。但该函数返回true。任何人都可以解释为什么?

6个回答

验证电话号码的 JavaScript:

function phonenumber(inputtxt) {
  var phoneno = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
  if(inputtxt.value.match(phoneno)) {
    return true;
  }
  else {
    alert("message");
    return false;
  }
}

上面的脚本匹配:

XXX-XXX-XXXX
XXX.XXX.XXXX
XXX XXX XXXX

如果您想以下列方式在数字前使用 + 号
+XX-XXXX-XXXX
+XX.XXXX.XXXX
+XX XXXX XXXX
使用以下代码:

function phonenumber(inputtxt) {
  var phoneno = /^\+?([0-9]{2})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})$/;
  if(inputtxt.value.match(phoneno)) {
    return true;
  }  
  else {  
    alert("message");
    return false;
  }
}
这将匹配(123-456 7890or 123).456-7890,我确定这是想要的。
2021-04-21 07:45:38
不客气..感谢您的更正..@Stano
2021-04-26 07:45:38
试试我给出的例子。正则表达式中的括号是可选的,因此您可以有一个但不能有第二个。此外,如果有一个连字符作为第一个分隔符,则您接受点作为第二个分隔符...
2021-05-01 07:45:38
我不明白你在做什么..canu 简要解释@M42
2021-05-05 07:45:38
您能否引用您的答案来自这里(除非它是您自己的帖子或其他内容):w3resource.com/javascript/form/phone-no-validation.php
2021-05-12 07:45:38

此正则表达式/^(\([0-9]{3}\)\s*|[0-9]{3}\-)[0-9]{3}-[0-9]{4}$/验证以下所有内容:

'123-345-3456';
'(078)789-8908';
'(078) 789-8908'; // Note the space

分解正在发生的事情:

正则表达式可视化

  1. 在开头的组验证方式有两种:(XXX)XXX-与右括号后的可选空间。
  2. 小组检查后的部分 XXX-XXX
它将匹配(123- 456-7890123)456-7890,我不确定是否需要。
2021-04-17 07:45:38

这是我如何做到的。

function validate(phone) {
  const regex = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
  console.log(regex.test(phone))
}

validate('1234567890')     // true
validate(1234567890)       // true
validate('(078)789-8908')  // true
validate('123-345-3456')   // true

这是迄今为止我发现使用 javascript regex 检查电话号码格式的最简单方法。这个特定的例子检查它是否是一个 10 位数字。

<input name="phone" pattern="^\d{10}$" type="text" size="50">

如果模式与值不匹配,则在单击提交按钮时输入字段会被标记,不需要其他 css 或 js。

谁能解释为什么

因为您的正则表达式确实与输入匹配。只是输入还包括额外的字符。您包括 '^' 来表示行的开头,但是(正如 Andy 所说)您应该包括 '$' 来表示行的结尾。

如果您以 '^' 开头并以 '$' 结束正则表达式,那么它只会匹配仅匹配您的正则表达式的行。

通过以 '^' 开始您的正则表达式而不是以 '$' 结束它,您可以匹配以与您的正则表达式匹配的序列开头的行,但行可以在匹配序列之后包含任何其他内容。