【问题标题】:RegEx: Match one of two patterns正则表达式:匹配两种模式之一
【发布时间】:2014-12-22 23:55:42
【问题描述】:

我有两个正则表达式,一个用于验证手机号码,一个用于家庭电话号码。

手机号码格式:

^((07|00447|\+447)\d{9}|(08|003538|\+3538)\d{8,9})$

家庭号码模式:

((0|0044|\+44)\d{10}|(08)\d{9}|(90)\d{6}|(92)\d{6}|(437)\d{5}|(28)\d{6}|(37)\d{6}|(66)\d{6}|(82)\d{6}|(777)\d{5}|(93)\d{6})$

有没有办法将这两个表达式结合起来,以便我可以将它们应用于“联系号码”字段,如果输入匹配任一表达式,该字段将是有效的?

【问题讨论】:

标签: regex


【解决方案1】:

将两个正则表达式放入由交替运算符|分隔的非捕获组中。

^(?:((07|00447|\+447)\d{9}|(08|003538|\+3538)\d{8,9})|((0|0044|\+44)\d{10}|(08)\d{9}|(90)\d{6}|(92)\d{6}|(437)\d{5}|(28)\d{6}|(37)\d{6}|(66)\d{6}|(82)\d{6}|(777)\d{5}|(93)\d{6}))$

【讨论】:

    【解决方案2】:

    将它们与一个管道组合起来,它是 or 运算符。

    ^((07|00447|\+447)\d{9}|(08|003538|\+3538)\d{8,9})|((0|0044|\+44)\d{10}|(08)\d{9}|(90)\d{6}|(92)\d{6}|(437)\d{5}|(28)\d{6}|(37)\d{6}|(66)\d{6}|(82)\d{6}|(777)\d{5}|(93)\d{6})$
    

    【讨论】:

      【解决方案3】:

      你可以拥有|条件的非捕获组:

      ^(?:(07|00447|\+447)\d{9}|(08|003538|\+3538)\d{8,9})|(?:(0|0044|\+44)\d{10}|(08)\d{9}|(90)\d{6}|(92)\d{6}|(437)\d{5}|(28)\d{6}|(37)\d{6}|(66)\d{6}|(82)\d{6}|(777)\d{5}|(93)\d{6})$
      

      【讨论】:

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