这是我用来验证手机号码的验证码。如果我输入带有字母或任何无效数字的手机号码,它也会接受。有人可以说明这有什么问题吗?
由于
var g=document.getElementById('mobile').value;
if (g.length == 0 )
{
alert( "Please Enter Mobile Number." );
formn.mobile.focus();
return false;
}
if(g.length>0)
{
if((g.length<10)||(g.length>10))
{
alert( "Mobile number should be 10 digits");
document.getElementById('mobile').focus();
return false;
}
else
{
var h3=/^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$/;
if(g.match(h3)!=null)
{
alert( "Please Enter Valid Mobile Number");
document.getElementById('mobile').focus();
return false;
}
}
}
编辑:我正在考虑删除10位数的条件,并允许用户根据自己的选择和自己的方式输入手机号码,然后使用正则表达式替换/重新格式化,以便只有10位数数字手机号码进入数据库。在谷歌搜索期间,我发现stackoverflow上的某个地方^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$
适用于以下场景中的重新格式化。感谢有人可以帮助我重新格式化并在用户进入下一个文本框时显示重新格式化的数字(失去焦点)
9883443344
09883443344
919883443344
0919883443344
+919883443344
+91-9883443344
0091-9883443344
+91 -9883443344
+91- 9883443344
+91 - 9883443344
0091 - 9883443344
答案 0 :(得分:2)
为什么不使用[0-9]作为正则表达式,基本上如果它不在0-9中则无效,也许你想要+对于电话号码前面00的国际电话..
如果您还没有,请查看这些测试人员:
var re = /[0-9+]/g;
var str = '0700';
var m;
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}
如果找不到/[0-9+]/g
则不合法
答案 1 :(得分:2)
使用以下代码: -
var g=document.getElementById('mobile').value;
if (g.length == 0 )
{
alert( "Please Enter Mobile Number." );
formn.mobile.focus();
return false;
}
if(g.length>0)
{
if((g.length<10)||(g.length>10))
{
alert( "Mobile number should be 10 digits");
document.getElementById('mobile').focus();
return false;
}
else
{
var h3=/^[1-9]{1}[0-9]{9}$/;
if(h3.test(document.getElementById('mobile').value) == false)
{
alert( "Please Enter Valid Mobile Number");
document.getElementById('mobile').focus();
return false;
}
}
}
更新了您的正则表达式代码。
答案 2 :(得分:1)
此正则表达式适用于您提到的所有用例,并严格拒绝其他模式。
((00)|\+|0)?((91)|0)?\s{0,2}-?\s{0,2}(\d{10})