使用RegEx分析电话号码格式
本文关键字:电话号码 格式 RegEx 使用 | 更新日期: 2023-09-27 17:59:58
我的应用程序中有三种类型的电话格式:
//tel:+17548758181;ext=8142
//718-222-4568
//718-333-1234 ext/option 718280
所以我知道的最低格式是:
tel:+bunchofNumbers;ext=bunchOfNumbers
###-###-####
###-###-#### ext/option bunchofnumbers
所以我想用一种格式来解析它们,如果它存在的话,我会得到一个类似"7182224568"的电话,以及类似"3376"的电话扩展名。我可以用普通的字符串操作方法编写它,但我想知道是否有更好的方法可以使用RegEx?我不熟悉RegEx tho。
世界各地的电话号码差异很大。即使在美国,这些号码也可以是全球号码(+6425551212,新西兰的一个号码)、本地区号(5551212)或本地号码(6175551212,波士顿的一个数字[我希望])。
除非你需要实际拨打电话,否则最好的方法是允许最终用户只输入任何内容。
这是一种可能的方法:
string[] inputs =
{
"tel:+17548758181;ext=8142",
"718-222-4568",
"718-333-1234 ext/option 718280"
};
var pattern = @"^'D*?(?:'+1)?(?<Number>'d{10}|'d{3}-'d{3}-'d{4})'D*(?<Ext>'d*)$";
foreach (var input in inputs)
{
var match = Regex.Match(input, pattern);
Console.WriteLine("{0}: {1}", match.Success, input);
if (match.Success)
{
Console.WriteLine("Number: {0}, Ext: {1}",
match.Groups["Number"].Value.Replace("-", ""),
match.Groups["Ext"].Value);
}
Console.WriteLine();
}
您可以在"Ext"组中使用String.IsNullOrEmpty
来检查扩展。
模式分解:
^'D*?
-匹配字符串的开头(^
),以及零个或多个非数字('D*
)。由于数字中的"+1"符合非数字的条件,我通过添加问号元字符使非数字检查不贪婪,因此'D*?
(?:'+1)?
-非捕获组,以匹配可选的数字"+1"(?<Number>'d{10}|'d{3}-'d{3}-'d{4})
-带和不带短划线的数字的命名组'D*
-如果存在扩展,则匹配零个或多个非数字(?<Ext>'d*)$
-扩展名的命名组,如果不存在,则匹配零个或多个数字。还要匹配字符串的末尾