gpt4 book ai didi

javascript - 正则表达式 - 使用两种不同的模式验证帐号

转载 作者:行者123 更新时间:2023-11-29 18:16:37 25 4
gpt4 key购买 nike

我需要验证帐号。有效数字可以是正好 11 数字的序列,也可以是用连字符分隔的 3 组数字(2 位 - 3 位 - 6 位)

我试过这个:

/^([0-9]{11})|([0-9]{2}-[0-9]{3}-[0-9]{6})$/

但它只适用于第二条规则。第一条规则不起作用,因为它允许超过 11 位的数字

这就是我在 js 函数中使用正则表达式的方式:

 var re = /^([0-9]{11})|([0-9]{2}-[0-9]{3}-[0-9]{6})$/;
if (re.test(txtNumber.value)==true) {
return 1;
}
else {
alert("Invalid Account Number");
return 0;
}

任何建议或指导将不胜感激

有效号码:

12345678912(11 位数字)

12-345-678912(用连字符分隔的 11 位数字)

无效数字:

1223(少于11位)

111111111111(超过11位)

123-23-678912(11位,但没有正确分隔,应该是2位-3位-6位)

最佳答案

由于|正则运算符的优先级最低,所以应该这样写:

/^(?:[0-9]{11}|[0-9]{2}-[0-9]{3}-[0-9]{6})$/

... 以便将交替模式绑定(bind)到字符串的开头和结尾。

在您的代码中,模式检查 字符串开头的 11 位数字序列,或“两位数、连字符、三位数字、连字符、六位数字”的序列 em>在它的末端 - 但从来没有真正将规则绑定(bind)到两端。这很容易证明:

var patt = /^([0-9]{11})|([0-9]{2}-[0-9]{3}-[0-9]{6})$/;
patt.test('acdbdfdsfsf22-333-666666'); // true

作为旁注,因为您不需要使用该分组表达式捕获任何内容,所以我在它前面添加了 ?:。其实还可以进一步优化:

/^[0-9]{2}(?:[0-9]{9}|-[0-9]{3}-[0-9]{6})$/

...因为交替越少越好。但在这种情况下,我想这真的无关紧要。


简而言之,问题可以用这两种模式来说明:

/^a|b$/

这读作“匹配字符串开头的a,或结尾的b”。

/^(?:a|b)$/

这读作“匹配字符串的开头,后跟ab,然后是字符串的结尾”字符串'。

关于javascript - 正则表达式 - 使用两种不同的模式验证帐号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22749891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com