我有一个项目,我有一个电话号码的输入。所述电话号码可以来自任何国家。用户在输入电话号码之前选择了国家/地区。
当用户在WPF中输入电话号码时,有没有办法格式化电话号码?
我正在玩Google的C#库端口,但无济于事(click here)
谢谢!
答案 0 :(得分:1)
我建议你使用两个属性,在属性HomeNumber
中使用正则表达式来格式化数字输入。
示例(更接近伪代码):
public string Country
{
get { return country; }
set { country = value; }
}
public string HomeNumber
{
get
{
if (homeNumber == null)
{
return string.Empty;
}
if (country.Equals("USA"))
{
return Regex.Replace(homeNumber, @"(\d{2})(\d{2})(\d{2})", "$1-$2-$3");
}
else if (country.Equals("Russia"))
{
return Regex.Replace(homeNumber, @"(\d{3})(\d{2})(\d{2})", "$1-$2-$3");
}
}
set
{
homeNumber = value;
}
}
如果国家要选择很多,为了减少构造数量If
,我建议使用State
模式。
Advantages
Disadvantages
答案 1 :(得分:0)
国际电话号码的定义很混乱,原因有以下三个:
1)如何拨打国际电话号码取决于您所在的国家/地区。如果您的应用程序仅在一个国家/地区使用,则还算不错。但是,可能有几种方法可以建立国际连接,例如先拨打00或直接拨打+。
2)电话号码的国家/地区代码设计得特别糟糕。只是一些例子:
1339美国
1340维尔京群岛(加勒比海群岛)
1341美国
1342未使用
1343加拿大
美国,加拿大和一些较小的地方共享1作为国家/地区代码,接下来的3位数字决定是美国还是加拿大还是... ...没有简单的方法来计算国家/地区,例如前xxx个是加拿大,其余的美国。
某些国家/地区具有2位数的代码,其他国家/地区则为3和4。
3)即使在同一国家/地区,不同地区的格式也可能不同。
最简单的解决方案可能是:
当然,您也可以通过格式化国家/地区内的区号来进一步使其复杂化。我无法在区域方面为您提供帮助,但是对于其余部分,您可以在Github上找到代码(太多内容可在此处发布): github.com/PeterHuberSg/WpfWindowsLib/blob/master/WpfWindowsLib/PhoneTextBox.cs
有关国际电话号码和PhoneTextBox的详细说明,请参见CodeProject: International Phone Number Validation Explained