验证电话号码的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" />