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

时间:2013-07-01 17:43:16

标签: javascript regex validation

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

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

+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>

4 个答案:

答案 0 :(得分:2)

  

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

     
     

除了700案例外,这个答案是行不通的,因为OP指定所有前缀后跟6位数,而实际上只有93700后跟6,其他前缀后跟7位数。

/^\+93(77\d|78\d|79\d|700)\d{6}$/

应该这样做。

你的原始正则表达式虽然在前面不需要“+”。

答案 1 :(得分:1)

我认为这符合你的条件

完全需要11位数字前缀+。

  

因此,如果77 | 78 | 79表示后跟7位数字或700表示,则接下来   按6位数。

var reg = /^\+93((77|78|79)\d{7}|700\d{6})$/;
console.log(reg.test('+93705657024'));

选中此Fiddle

答案 2 :(得分:1)

正则表达式本身:

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" />

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

答案 3 :(得分:0)

使用:

/^\+937([789]|00)\d\d\d\d\d\d$/

应该这样做。

  

+937你的所有号码都以此开头   ([789] | 00)7,8,9或00
  \ d \ d \ d \ d \ d 6位数