我想从一系列不同的输入中转换拨号号码
如果我想取数字,例如
+65 12345678
+44 12345678
+852 12345678
然后将它们转换为所有 +65 数字
12345678
+44 号码变成
001 44 12345678
然后 +852 数字变为
*852 12345678
并同时删除空格和其他有趣的字符,如连字符或句点(“-”、“.”)什么是执行此操作的最佳正则表达式或 c# 中的最佳解决方案?
您可以使用委托来做到这一点:
Regex reg = new Regex(@"\+(\d{2,3})[-. ](\d{8})");
string result = reg.Replace(input, delegate(Match m) {
switch (m.Groups[1].Value) {
case "65": return m.Groups[2].Value;
break;
case "44": return "001 44 " + m.Groups[2].Value;
break;
case "852": return "*852 " + m.Groups[2].Value;
break;
default: return m.Value;
break;
}
});
最终我选择了谷歌 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 移植版本一样好的东西。它去除了任何垃圾,并轻松地完全确定了我需要的一切。还能够获取线路类型(移动、固定、高级等)、用于拨号的区域代码等等。工作完成感谢谷歌。