【问题标题】:Complex regular expression for validate phone number based on state prefix基于状态前缀验证电话号码的复杂正则表达式
【发布时间】:2014-08-29 14:22:36
【问题描述】:

我正在编写或至少尝试使用 Javascript 验证委内瑞拉电话号码的正则表达式。我做了一个基本的表达式:/^0[0-9]{10}$/,它允许像这样的数字:

02129876543 (VALID)
02139876543 (INVALID)
02149876543 (INVALID)

但第 2 和第 3 无效,因为前缀值 213214 无效。我有一个有效前缀列表(取自维基百科),是这个:

248, 281, 282, 283, 235, 247, 278, 243, 244, 245, 246, 273, 278, 235, 285, 286, 288, 
241, 242, 243, 245, 249, 258, 287, 212, 259, 268, 269, 237, 235, 238, 246, 247, 251, 
252, 253, 271, 273, 274, 275, 212, 234, 239, 287, 291, 292, 295, 255, 256, 257, 293, 
294, 276, 277, 271, 272, 212, 251, 253, 254, 261, 262, 263, 264, 265, 266, 267, 271, 
275, 260, 270, 412, 414, 424, 416, 426

如何构建正则表达式来检查这些前缀的有效性?有效数字应始终以零开头(0) 后跟上述任何前缀,再后跟七位数字,可以帮我吗?

【问题讨论】:

    标签: javascript regex validation


    【解决方案1】:

    您的正则表达式将包含所有这些前缀,但您可以在此交替模式上构建一些东西:

    /^0(?:212|24[123589]|252|294)[0-9]{7}$/
    

    【讨论】:

    • 那么,如果我得到它,我应该在正则表达式中添加任何前缀吗?对吗?
    • 虽然答案是正确的,但您似乎忘记了一些前缀,例如281271426...这正常吗?
    • @pomeh 根本不对,只是一个让我走上正确道路的例子,我明白了,所以指向 anubhava,我更喜欢第二种方法
    • @pomeh 不,我没有为 OP 构建整个正则表达式,只是举例说明了如何构建正则表达式。
    【解决方案2】:

    在@anubhava 的回答的基础上,您将为每个人构建它。整个正则表达式看起来像这样..

    ^0(?:2(?:12|3[45789]|[45][1-9]|6[0-9]|7[0-8]|8[1235678]|9[1-5])|4(?:1[246]|2[46]))\d{7}$
    

    Live Demo

    【讨论】:

      【解决方案3】:

      完整的正则表达式是,

      ^0(?:2(?:12|4[1-9]|5[1-9]|6[0-9]|7[0-8]|8[1-35-8]|9[1-5]|3[45789])|4(?:1[246]|2[46]))\d{7}$
      

      DEMO

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-23
        • 1970-01-01
        相关资源
        最近更新 更多