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

时间:2017-07-20 04:59:55

标签: javascript regex

我希望用户在文本框中键入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位或更多位数也显示“有效”。请帮忙!

4 个答案:

答案 0 :(得分:1)

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

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

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

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

将整个事物与锚点分开:

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

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

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

答案 1 :(得分:0)

<强>样本

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位数字(?:捕获组

答案 2 :(得分:0)

尝试正则表达式

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

答案 3 :(得分:0)

你的正则表达式实际上是&#34;如果前7个字符是数字则匹配,或者如果最后10个字符是数字&#34;则匹配。

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

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

您可以看到它有效here