【问题标题】:PHP regex for Lebanese phone number黎巴嫩电话号码的PHP正则表达式
【发布时间】:2011-03-06 18:04:30
【问题描述】:

我正在编写一个 php 应用程序,询问人们在黎巴嫩的电话号码。我不想对输入格式非常严格,所以我在验证时遇到了一些麻烦。

一个黎巴嫩电话号码是这样的。

961 3 123456

961:国家代码。我希望它在有或没有它的情况下都有效。

3:区号。这就是棘手的地方。可能的区号是 ​​03、70 和 71。当存在国家代码时,03 去掉 0 并变为 3,而 70 和 71 则与有或没有国家代码一样。

123456:电话号码,始终为 6 位。

这是我要验证的格式:

961 3 123456
961 70 123456
961 71 123456
03 123456
70 123456
71 123456

这里的空格只是为了清楚起见,我在去除所有空格和非字母数字字符后进行验证。

就是这样,如果有人可以提供帮助,那就太好了。 谢谢

【问题讨论】:

  • 为什么要有人按区号3的0,什么时候会被丢弃?这对我来说毫无意义,因为它是另一个带或不带 0 的电话号码。
  • 数字 03 123456 有两种写法:03123456 或 9613123456

标签: php regex


【解决方案1】:

我确信有一种更巧妙的方法可以做到这一点,但是

^(961(3|70|71)|(03|70|71))\d{6}$

假设我了解要求,似乎可以工作。

【讨论】:

    【解决方案2】:

    ^((961)?(7(0|1))|(961|0)3)[0-9]{6}$

    它是这三个正则表达式的组合:

    (961)?(7(0|1))  // 70 and 71 prefixes
    (961|0)3        // (0)3 prefix
    [0-9]{6}        // main number
    

    【讨论】:

      【解决方案3】:

      允许使用空格或通用分隔符(虽然我知道你说过你不关心它们):

      ^((961[\s+-]*(3|7(0|1)))|(03|7(0|1)))[\s+-]*\d{6}$
      

      http://regexr.com?2t89v

      【讨论】:

        【解决方案4】:

        这个正则表达式处理黎巴嫩https://en.wikipedia.org/wiki/Telephone_numbers_in_Lebanon的所有区号

        ^(?:\+961|961)?(1|0?3[0-9]?|[4-6]|70|71|76|78|79|7|81?|9)\d{6}$
        

        You can check on regexr

        【讨论】:

        • 嗨,欢迎来到 Stack Overflow。在回答已经有很多答案(或已接受的答案)的问题时,请务必添加一些额外的见解,说明为什么您提供的回复是实质性的,而不是简单地重复原始发帖人已经审查过的内容。
        猜你喜欢
        • 2011-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-23
        • 2014-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多