【问题标题】:Regular Expression Phone Number and Phone Extension正则表达式电话号码和电话分机
【发布时间】:2012-04-28 23:12:57
【问题描述】:

我有一个正则表达式可以清理电话号码并将它们转换为有效的电话号码,例如:+1 123-1223。

正则表达式:

Regex.Replace(phone, @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*$", "+1 $1$2$3-$4$5$6-$7$8$9$10");

但我想添加它,所以任何超过 12 个号码的号码都会添加剩余的号码作为扩展名。因此,如果号码是 810.232.122323,它将变为 +1 810-232-1223 x23。

这可以通过更改正则表达式来实现吗?有没有好的方法来做到这一点?我不太了解正则表达式。谢谢!

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    只需将其添加到末尾,它将是您的第 11 组(除非它实际上有 2 位或更多位数,否则它不会接听分机

    (\d{2,})
    

    代码将是:

    Regex.Replace(phone, 
        @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d{2,})$", 
        "+1 $1$2$3-$4$5$6-$7$8$9$10 Ext $11");
    

    如果这是可选的,那么这样做:

    (\d{2,})?
    

    它仍然会匹配您的电话号码,但不会像上面那样强制分机

    要使这个可选也不使用Ext,那么你需要使用MatchEvaluator

    类似这样的东西(但我面前没有编译器,所以它可能有一点偏差,应该测试一下)

    Regex.Replace(phone, 
        @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d{2,})$", 
        "+1 $1$2$3-$4$5$6-$7$8$9$10 Ext $11");
         match =>
         {
             var returnVal = "+1 ";
             for(int i = 1; i <= 3; i++)
             {
                 returnVal += match.Groups[i].Value;
                 if(i == 3 || i == 6)
                     returnVal += "-";
             }
             returnVal += match.Groups[11].Success ? " Ext " + match.Groups[11] : "" )
             return returnVal;
         }
    )
    

    【讨论】:

    • @Justin 我添加了以防扩展是可选的。只是认为这也可能有用:)
    • 非常感谢!拥有它是非常好的。是否可以使用可选隐藏 Ext,使其看起来不像 Ext(此处为空白)?
    • @Justin 有可能更新
    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 2014-02-15
    • 2016-02-02
    • 2011-12-14
    • 2013-05-26
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多