В конце концов я пошел за перенесенную версию 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, действительно hel PED.
Для кого-либо еще, выполняющего эту задачу, я ничего не обнаружил где-нибудь рядом с версией с номером libphonenumber. Он удаляет любой мусор и полностью гвоздит все, что мне нужно, с легкостью. Также можно получить тип линии (мобильный, фиксированный, премиальный и т. Д.), Региональный код для набора номера и многое другое. Работа выполнена благодаря Google.
Четыре отдельных регулярных выражения, которые выполняют каждую задачу, выполняются отдельно. (Четвертый уход за удалением дефисов, периодов, пробелов и т. Д., Оставшихся после первых трех, выполнил свою работу.) Вы уже пытались сделать хоть одну из них? –
только начинаю, я могу запустить 3, но задавался вопросом, есть ли какие-то более чистые способы сделать это. – user1320651
«Чище» - «проще всего кодировать и обслуживать». Попытка сделать это за один шаг вовсе не «чиста», и в будущем ее будет чрезвычайно сложно модифицировать. –