C# 正则表达式拨号码模式

C# 正则表达式拨号码模式,c#,regex,C#,Regex,我想从一系列不同的输入中转换拨号号码 如果我想取数字,比如 +65 12345678 +44 12345678 +852 12345678 然后将它们转换为所有+65数字 12345678 +44个数字变成 001 44 12345678 *852 12345678 然后+852个数字变成 001 44 12345678 *852 12345678 同时删除空格和其他有趣的字符,如连字符或句点(“-”,“”)。在c#中最好的正则表达式是什么,或者最好的解决方案是什么?您可以使用

我想从一系列不同的输入中转换拨号号码

如果我想取数字,比如

 +65 12345678
 +44 12345678
 +852 12345678
然后将它们转换为所有+65数字

12345678
+44个数字变成

001 44 12345678
*852 12345678
然后+852个数字变成

001 44 12345678
*852 12345678
同时删除空格和其他有趣的字符,如连字符或句点(“-”,“”)。在c#中最好的正则表达式是什么,或者最好的解决方案是什么?

您可以使用委托:


最后,我选择了移植版的google libphonenumber

bitbucket.org/pmezard/libphonenumber-csharp/wiki/Home

    private DialedNumber applyCallPattern(string noToDial)
    {

        noToDial = noToDial.Replace("callto:", ""); 
       //libphone removes text anyway so this line above is not needed


        PhoneNumberUtil phoneUtil = PhoneNumberUtil.GetInstance();
        string dc = "SG";
        if (AutoDialer.Properties.Settings.Default.BaseOffice == "Hong Kong")
        {
            dc = "HK";
        }
        PhoneNumber pn = phoneUtil.Parse(noToDial, dc);
        string rc = phoneUtil.GetRegionCodeForNumber(pn);
        string dialingNumber = null;



        if (rc == "SG")
        {
            dialingNumber = phoneUtil.Format(pn, PhoneNumberFormat.NATIONAL);
            if (AutoDialer.Properties.Settings.Default.BaseOffice == "Hong Kong")
            {
                dialingNumber = "*65" + dialingNumber;
            }
        }

        else if (rc == "HK")
        {
            dialingNumber = phoneUtil.Format(pn, PhoneNumberFormat.NATIONAL);
            if (AutoDialer.Properties.Settings.Default.BaseOffice == "Singapore")
            {
                dialingNumber = "*852" + dialingNumber;
            }
        }

        else
        {
            dialingNumber = phoneUtil.Format(pn, PhoneNumberFormat.E164);
            dialingNumber = dialingNumber.Replace("+", "001");
        }
        dialingNumber = dialingNumber.Replace(" ", "");
        DialPopup popup = new DialPopup();
        popup.label1.Text = "Calling: " + dialingNumber;
        popup.Show();

        DialedNumber dn = new DialedNumber(dialingNumber, phoneUtil.GetRegionCodeForNumber(pn), phoneUtil.GetNumberType(pn).ToString(), DateTime.Now, false);
        Program.lastNoDialed = dialingNumber;
        return dn;
    }
libphonenumber触动人心,让事情变得简单多了,所以感谢Alden的建议,真的很有帮助


对于其他执行此任务的人来说,我还没有找到任何比libphonenumber移植版本更好的版本。它去除了所有的垃圾,完全钉上了我需要的所有东西。还可以获得线路类型(移动、固定、高级等)、拨号的地区代码以及更多信息。感谢Google完成了这项工作。

四个独立的正则表达式,分别执行每项任务。(第四个负责删除前三个完成工作后剩余的连字符、句点、空格等。)您尝试过其中任何一个吗?刚刚开始,我可以运行3,但不知道是否有更干净的方法来执行此“干净”是“最容易编码和维护的”。试着一步一个脚印地完成这件事一点也不“干净”,而且将来很难修改。好吧,假设我有100个国际拨号代码。假设你的问题是发布你的实际需求,并且自己努力解决它,而不是试图在评论中讨论它。:-)你特别要求执行四个不同的操作,因此如果你的问题与编辑不同,请正确提问。好的,我明白了。我再过一百万年也得不到这个