我需要将一些规则应用于电话号码输入字段,以下是我的尝试:
var positive_checks = new Array(
/^[0-9]{8}$/g // 1. Must have 8 digits exactly
);
var negative_checks = new Array(
/^[0147]/g, // 2. Must not start with 0,1,4 or 7
/^[9]{3}/g, // 3. Must not start with 999
/(.)\\1*$/g // 4. Must not be all the same number
);
for (i in positive_checks) {
if (str.search(positive_checks[i]) < 0) {
return false;
}
}
for (i in negative_checks) {
if (str.search(negative_checks[i]) >= 0) {
return false;
}
}
除了规则4之外,所有规则都有效,除了它以某种方式使用反向引用之外我还不完全理解。我认为有人提到环境需要允许反向引用,Javascript就是这样的环境吗?
其次,我有兴趣尝试重做所有规则,所以我只需要一个规则数组和循环而不需要检查否定检查,这些实例中是否可能这样做?最终我正在寻找一个Javascript解决方案,但是能够在所有4中使用正则表达式使我看起来更好看的代码,并且表单验证逻辑意味着性能在这里不是真正的问题。
答案 0 :(得分:3)
你的第四条规则可能不起作用,因为你的反引用有双反斜杠,我也会锚定它并将*
量词改为+
意思是“一次或多次”
/^(.)\1+$/g
说明:
^ # the beginning of the string
( # group and capture to \1:
. # any character except \n
) # end of \1
\1+ # what was matched by capture \1 (1 or more times)
$ # before an optional \n, and the end of the string
将验证您所有要求的单行程序:
var re = /^(?=.{8}$)(?!999|[0147]|(.)\1+)[0-9]+$/
答案 1 :(得分:1)
使用regexr.com/39khr并悬停表达式的不同部分以查看它们的作用。
由于你没有说什么不起作用,即:给出一个应该是真实的错误数字的例子,或者相反,你很难给出答案。