我正在修改脚本。该脚本包含一个表单,允许访问者向手机号码发送短信。在表单中,我有一个文本框,用户可以在其中输入文本接收器的电话号码。我正在使用正则表达式验证电话号码以防止垃圾邮件发送者,并确保用户输入正确的号码。
以下是阿富汗使用的默认电话号码:
+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>
答案 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
,因此我没有在表达式周围插入/
和/
。 (我提到这是因为你评论说其他一些答案根本不起作用,我怀疑是因为你可能忘记在测试之前删除/和/,或许?它们似乎有些小问题这就是为什么我也在回答,但如果你删除正则表达式周围的/和/,其他答案应该至少匹配一些有效的电话号码。)?:
。)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位数