我有一个正则表达式清理电话号码并将其转换为有效的电话号码:+1 123-1223。
正则表达式:
Regex.Replace(phone, @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*$", "+1 $1$2$3-$4$5$6-$7$8$9$10");
但我想补充一下,所以超过12个数字的任何东西都会将剩下的数字作为扩展名添加。因此,如果数字是810.232.122323,它将变为+1 810-232-1223 x23。
通过更改正则表达式可以实现吗?有没有办法做到这一点?我不太了解正则表达式。谢谢!
答案 0 :(得分:2)
只需将此添加到最后,它将是您的第11组(除非它实际上有2位数或更多,否则它不会接收扩展名
(\d{2,})
代码将是:
Regex.Replace(phone,
@"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d{2,})$",
"+1 $1$2$3-$4$5$6-$7$8$9$10 Ext $11");
如果这是可选的,请执行以下操作:
(\d{2,})?
它仍然会匹配您的电话号码,但不会强制执行上述扩展程序
要使此选项也不使用Ext,则需要使用MatchEvaluator
像这样的东西(但是我面前没有编译器,所以可能会稍微关闭并且应该进行测试)
Regex.Replace(phone,
@"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d{2,})$",
"+1 $1$2$3-$4$5$6-$7$8$9$10 Ext $11");
match =>
{
var returnVal = "+1 ";
for(int i = 1; i <= 3; i++)
{
returnVal += match.Groups[i].Value;
if(i == 3 || i == 6)
returnVal += "-";
}
returnVal += match.Groups[11].Success ? " Ext " + match.Groups[11] : "" )
return returnVal;
}
)