检查不同格式的电话号码以确定等效的最佳方式是什么?
不同的格式:
"(708)399 7222"
" 7083997222"
" 708-399-7222"
" 708399-7222"
" +1(708)399-7222"
" +1(708)399-7222"
其他问题:如果电话号码不是以国家/地区代码开头会怎么样?
答案 0 :(得分:1)
您不能使用单个正则表达式。获得可比较的规范表示:
00
。如果您只需要处理来自单个国家/地区的电话,这就足够了,例如,如果您正在开发一些供电话公司内部使用的电话。如果您必须接受来自不同国家/地区的各种前缀的广泛输入,我建议您找一个经过良好测试的库来执行此操作。
答案 1 :(得分:0)
试试这个正则表达式
\(?\d{3}\)?-? *\d{3}-? *-?\d{4}
或者:
^\+?(\d[\d-]+)?(\([\d-.]+\))?[\d-]+\d$
<强> Regex Demo 强>
答案 2 :(得分:0)
您可以实施PhoneEqualityComparer
课程。如果您只处理美国号码,则以下代码将起作用:
sealed class PhoneEqualityComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return string.Equals(NormalizePhone(x), NormalizePhone(y));
}
public int GetHashCode(string obj)
{
return NormalizePhone(obj).GetHashCode();
}
private static string NormalizePhone(string phone)
{
if (phone.StartsWith("+1"))
phone = phone.Substring(2);
return Regex.Replace(phone, @"\D", string.Empty);
}
}
样本用法:
string[] phones = new[] {
"(708) 399 7222",
"7083997222",
"708-399-7222",
"708399-7222",
"+1 (708) 399-7222",
"+1 (708)399-7222"
};
string[] uniquePhones = phones.Distinct(new PhoneEqualityComparer()).ToArray();
答案 3 :(得分:0)
这是一个非常整洁的正则表达式,将取代:
带有空白字符串
string text = Regex.Replace( inputString, @"\+\d+|[^0-9\r\n]", "" , RegexOptions.None | RegexOptions.Multiline );
<强>输入:强>
"(708) 399 7222"
"7083997222"
"708-399-7222"
"708399-7222"
"+1 (708) 399-7222"
"+1 (708)399-7222"
<强>输出:强>
7083997222
7083997222
7083997222
7083997222
7083997222
7083997222