我希望用户在文本框中键入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位或更多位数也显示“有效”。请帮忙!
答案 0 :(得分:1)
|
运算符适用于左侧和右侧的整个表达式,而不仅仅是括号中的组,除非您将其放在一个组中。所以你的表达基本上是:
^([0-9]{7})
或([0-9]{10})$
您需要的是复制^$
两侧的|
个锚点:
^([0-9]{7})$|(^[0-9]{10})$
或
将整个事物与锚点分开:
^(([0-9]{7})|([0-9]{10}))$
^(\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。