验证电话号码的Javascript正则表达式

验证电话号码的Javascript正则表达式,javascript,regex,validation,Javascript,Regex,Validation,我正在修改一个脚本。该脚本包含一个表单,允许访问者向电话号码发送短信。在表单中,我有一个文本框,用户在其中输入文本接收器的电话号码。我正在使用正则表达式验证电话号码,以防止垃圾邮件发送者,并确保用户键入正确的号码 以下是在阿富汗使用的默认电话号码: +93785657024 +93795657024 +93700565656 +93775657024 正则表达式验证首先应确保使用+93,然后确保在+93之后使用78、77、79或700(其中一个),最后后跟6位数字 下面是我试图修复的Javas

我正在修改一个脚本。该脚本包含一个表单,允许访问者向电话号码发送短信。在表单中,我有一个文本框,用户在其中输入文本接收器的电话号码。我正在使用正则表达式验证电话号码,以防止垃圾邮件发送者,并确保用户键入正确的号码

以下是在阿富汗使用的默认电话号码:

+93785657024
+93795657024
+93700565656
+93775657024
正则表达式验证首先应确保使用+93,然后确保在+93之后使用78、77、79或700(其中一个),最后后跟6位数字

下面是我试图修复的Javascript代码。此代码现在仅适用于+937后跟8位数字

<script type="text/javascript">
function test (){
  var phoneRegex = new RegExp('^937\d{8}$');
  var phoneNum = document.getElementById("receiver").value;
  if(!(phoneRegex.test(phoneNum))) {
    alert("Invalid Phone Number");
    document.getElementById("receiver").focus();
  } else {
    alert("valid");
  }
}
</script>

功能测试(){
var phoneRegex=new RegExp(“^937\d{8}$”);
var phoneNum=document.getElementById(“接收方”).value;
if(!(phoneRegex.test(phoneNum))){
警报(“无效电话号码”);
document.getElementById(“接收方”).focus();
}否则{
警报(“有效”);
}
}
正则表达式验证首先应确保使用+93,然后确保在+93之后使用78、77、79或700(其中一个),最后后跟6位数字



除非在700的情况下,否则这个答案将不起作用,因为OP指定所有前缀后面都有6位数字,而实际上只有93700后面跟着6位,其他前缀后面跟着7位数字

我应该这样做

不过,您原来的正则表达式不需要在前面加“+”

正则表达式验证首先应确保使用+93,然后确保在+93之后使用78、77、79或700(其中一个),最后后跟6位数字



除非在700的情况下,否则这个答案将不起作用,因为OP指定所有前缀后面都有6位数字,而实际上只有93700后面跟着6位,其他前缀后面跟着7位数字

我应该这样做

但是,您的原始正则表达式不需要在前面加“+”。

使用:

/^\+937([789]|00)\d\d\d\d\d\d$/
应该这样做

+937您所有的号码都以这个开头
([789]| 00)7、8、9或00 \d\d\d\d\d 6位数字

使用:

应该这样做

+937您所有的号码都以这个开头
([789]| 00)7、8、9或00 \d\d\d\d\d 6位数字


我想这会适合你的情况

总共需要11位数字,前缀为+

因此,如果77 | 78 | 79表示后跟7位,或者如果700表示后跟7位 按6位数


检查一下

我想这会适合你的情况

总共需要11位数字,前缀为+

因此,如果77 | 78 | 79表示后跟7位,或者如果700表示后跟7位 按6位数


检查此正则表达式本身:

var phoneRegex = new RegExp('(937(?:00\\d{6}|[789]\\d{7}))');
注:

  • 由于您使用的是
    new RegExp
    ,因此我没有在表达式周围插入
    /
    /
    。(我提到这一点是因为您评论说其他一些答案根本不起作用,我怀疑这是因为您可能忘记了在测试它们之前删除和/或?它们似乎有一些小问题,这就是为什么我也在回答,但其他答案至少应该匹配一些有效的电话号码,如果删除围绕正则表达式的/和/。)
  • 与您给出的有效阿富汗电话号码的示例相比,您似乎在计算数字时犯了错误+9377、+9378等后面跟7位而不是6位,而实际上只有+93700后面跟6位
  • 我的表达式将完整的电话号码放入临时变量$1中,这很方便。(我在比赛的第二部分使用了一个非捕获组作为备选方案,因为当我想对比赛结果执行其他操作时,额外捕获有时会带来麻烦。对于您的代码所做的操作,无论是否使用正则表达式所包含的
    ?:
    ,它都会起到相同的作用。)
  • 我的表达式不会将匹配锚定到字符串的开头或结尾,因为这样做将返回带有标点符号的有效数字的
    false
    ,例如您在自己的电话号码中显示的
    +
  • 出于同样的原因,我建议您在检查输入的有效电话号码之前删除非数字字符。现在,使用括号、连字符或任何传统标点符号的电话号码将返回
    false
    ,即使它们实际上是有效的
  • 此代码修改可确保通过删除标点符号正确识别有效电话号码:

    if(!(phoneRegex.test(phoneNum.replace(/\D+/g, '')))) {
    
  • 如果您对代码进行了此修改,那么最好在我建议的正则表达式周围添加锚定表达式
    ^
    $
    ,以确保它只包含有效的电话号码,而不是较长的号码,如信用卡号码

代码检查正则表达式测试结果的方式有问题。此代码将更适合您:

<script type="text/javascript">
function test (){
  var phoneField = document.getElementById("receiver")
  var phoneNum = phoneField.value;
  if (/^(937(?:00\d{6}|[789]\d{7}))$/.test(phoneNum.replace(/\D+/g, ''))) {
  alert('valid');
  } else {
  alert('Invalid phone number');
  phoneField.focus();
  }
}
</script>
<input id="receiver" value="+93785657024" />
<input type="button" onclick="test()" value="Check this number" />

功能测试(){
var phoneField=document.getElementById(“接收方”)
var phoneNum=phoneField.value;
if(/^(937(?:00\d{6}|[789]\d{7}))$/.test(phoneNum.replace(/\d+/g',)){
警报(“有效”);
}否则{
警报(“无效电话号码”);
focus();
}
}

注意:我把一些代码弄错了。请忽略我的其他代码(我的意思是上传到该链接的代码)。这一个有效。

正则表达式本身:

var phoneRegex = new RegExp('(937(?:00\\d{6}|[789]\\d{7}))');
注:

  • 由于您使用的是
    new RegExp
    ,因此我没有在表达式周围插入
    /
    /
    。(我之所以提到这一点,是因为您评论说,其他一些答案根本不起作用,我怀疑这是因为您可能忘记了在测试它们之前删除/和/或?它们似乎有一些小问题,这就是为什么我也在回答,但另一个问题。)
    <script type="text/javascript">
    function test (){
      var phoneField = document.getElementById("receiver")
      var phoneNum = phoneField.value;
      if (/^(937(?:00\d{6}|[789]\d{7}))$/.test(phoneNum.replace(/\D+/g, ''))) {
      alert('valid');
      } else {
      alert('Invalid phone number');
      phoneField.focus();
      }
    }
    </script>
    <input id="receiver" value="+93785657024" />
    <input type="button" onclick="test()" value="Check this number" />