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

Javascript 用于广泛电话号码验证的正则表达式,javascript,regex,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 sta

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

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个代码使用regex使其看起来更漂亮,作为表单验证逻辑意味着性能在这里并不是一个真正的问题。

您的第四条规则可能不起作用,因为您的反引用有两个反斜杠,我也会锚定它,并将*量词更改为+表示一次或多次

/^(.)\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]+$/
使用并悬停表达式的不同部分以查看它们的作用


因为你没有说什么不起作用,例如:举一个假数字的例子,这个数字应该是真的,或者相反,所以很难给你一个答案。

Hmmm-2,我做了什么?!您需要在哪个国家验证电话号码?您发布了您不理解的代码,并希望得到针对您的特定问题的完整解决方案,但您没有解释,这就是为什么downvotes@xShirase香港,虽然这些验证规则是专门针对我目前的项目,我不知道为什么需要他们,除了我猜任何以999开头的东西都会立即呼叫紧急服务。悬停在不同的部分,看看他们做了什么,只是为了指出这一点:我不认为oneliner是一种改进,恰恰相反。这使得维护验证逻辑比必须的要复杂得多。我同意,在这个例子中,一个线性程序只是在炫耀,但我喜欢尝试阅读它们,因为我发现它们很难编译。确实如此,想想下一个开发人员。。。或者你可以添加一个巨大的评论块,这将占用比4条规则加起来还要多的空间…是的,尝试将它们作为练习来使用是很有趣的。顺便说一句,我认为锚是绝对必要的。只是因为它听起来像是可选的。如果没有这一点,它会拒绝一切吗?我当然不认为这是炫耀,更像是通过编译四个不同的表达式使事情变得不那么复杂的一种方式。但这是我的观点,我每天都在编写/debug/benchmark regex。明白了,我以后会更坦率地谈论误报,谢谢你的链接,这会有很大帮助。