使用javascript正则表达式进行7或10位输入验证? [重复]

问题描述 投票:0回答:4

这个问题在这里已有答案:

我希望用户在文本框中键入7位数字或10位数字。

我的代码:

var numberfilter = /^([0-9]{7})|([0-9]{10})$/;
var x=document.forms["myForm"]["number_field"].value;
if(numberfilter.test(x)==true)
    alert("Valid");
else if(numberfilter.test(x)==false)
    alert("Invalid");

上述正则表达式对7位或更多位数也显示为“有效”。请帮忙!

javascript regex
4个回答
1
投票

|运算符适用于左侧和右侧的整个表达式,而不仅仅是括号中的组,除非您将其放在一个组中。所以你的表达基本上是:

^([0-9]{7})([0-9]{10})$

你需要的是复制^$两侧的|锚点:

^([0-9]{7})$|(^[0-9]{10})$

要么

将整个事物与锚点分开:

^(([0-9]{7})|([0-9]{10}))$

编辑:上面解释了你出错的地方,但解决方案不是最好的解决方案。有关更灵活的解决方案,请参阅reference评论:

^(\d{7})(\d{3})?$


0
投票

尝试正则表达式

/^([0-9]{7})$|^([0-9]{10})$/(全字长度为7或全字长度为10)


0
投票

你的正则表达式实际上是说“匹配前七个字符是数字还是最后10个字符是数字”。

这是因为你忘了将锚点放在条件的两端。尝试这样的事情。

^([0-9]{7})$|^([0-9]{10})$

你可以看到它工作here


0
投票

DEMO

var numberfilter = /^\d{7}(?:\d{3})?$/;
var x='6666666666';
var y='66666666';
var z='6666666';
test(x);
test(y);
test(z);
function test(x){
 if(numberfilter.test(x)==true)
    console.log(x+" Valid");
 else if(numberfilter.test(x)==false)
    console.log(x+" Invalid");
}

这里是正则表达式/^\d{7}(?:\d{3})?$/检查前7位数与(?:捕获组接下来的3位数

© www.soinside.com 2019 - 2024. All rights reserved.