正则表达式用于广泛的电话号码验证

时间:2014-10-06 01:28:28

标签: javascript regex

我需要将一些规则应用于电话号码输入字段,以下是我的尝试:

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中使用正则表达式使我看起来更好看的代码,并且表单验证逻辑意味着性能在这里不是真正的问题。

2 个答案:

答案 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并悬停表达式的不同部分以查看它们的作用。

由于你没有说什么不起作用,即:给出一个应该是真实的错误数字的例子,或者相反,你很难给出答案。