我需要以特定方式格式化我的电话号码。不幸的是,业务规则禁止我预先这样做。 (单独的输入框等。)
格式必须为+1-xxx-xxx-xxxx
,其中“+1”是常量。 (我们不做国际业务)
这是我的正则表达式模式来测试输入:
"\\D*([2-9]\\d{2})(\\D*)([2-9]\\d{2})(\\D*)(\\d{4})\\D*"
(我从其他地方偷走了)
然后我像这样执行regex.Replace():
regex.Replace(telephoneNumber, "+1-$1-$3-$5"); **THIS IS WHERE IT BLOWS UP**
如果我的电话号码在字符串中已经有“+1”,那么它会预先设置另一个,这样我就得+ 1- + 1-xxx-xxx-xxxx
有人可以帮忙吗?
答案 0 :(得分:2)
您可以添加(?:\+1\D*)?
以捕获号码前的可选前缀。它已被捕获,如果它被取代,它将被替换。
您不需要在号码前后使用\D*
。因为它们是可选的,所以它们不会改变任何东西。
您不需要捕获您不会使用的部分,这样可以更轻松地查看更换中的内容。
str = Regex.Replace(str, @"(?:\+1\D*)?([2-9]\d{2})\D*([2-9]\d{2})\D*(\d{4})", "+1-$1-$2-$3");
您可以考虑为分隔符使用比\D*
更具体的内容,例如[\- /]?
。使用非特定模式,您可能会发现某些不是电话号码的内容,例如将"I have 234 cats, 528 dogs and 4509 horses."
更改为"I have +1-234-528-4509 horses."
。
str = Regex.Replace(str, @"(?:\+1[\- /]?)?([2-9]\d{2})[\- /]?([2-9]\d{2})[\- /]?(\d{4})", "+1-$1-$2-$3");
答案 1 :(得分:1)
尝试这样的事情以使事情更具可读性:
"sDom": 'T<"clear">lfrtip',
"oTableTools": {***tableTools options**},
"sPaginationType": "full_numbers",
"bPaginate": true,
"iDisplayLength": 30,
"bLengthChange": false,
"bInfo": true,
"oLanguage": { *** some translations *** }
将为Regex rxPhoneNumber = new Regex( @"
^ # anchor the start-of-match to start-of-text
\D* # - allow and ignore any leading non-digits
1? # - we'll allow (and ignore) a leading 1 (as in 1-800-123-4567
\D* # - allow and ignore any non-digits following that
(?<areaCode>[2-9]\d\d) # - required 3-digit area code
\D* # - allow and ignore any non-digits following the area code
(?<exchangeCode>[2-9]\d\d) # - required 3-digit exchange code (central office)
\D* # - allow and ignore any non-digits following the C.O.
(?<subscriberNumber>\d\d\d\d) # - required 4-digit subscriber number
\D* # - allow and ignore any non-digits following the subscriber number
$ # - followed the end-of-text.
" ,
RegexOptions.IgnorePatternWhitespace|RegexOptions.ExplicitCapture
);
string input = "voice: 1 (234) 567/1234 (leave a message)" ;
bool isValid = rxPhoneNumber.IsMatch(input) ;
string tidied = rxPhoneNumber.Replace( input , "+1-${areaCode}-${exchangeCode}-${subscriberNumber}" ) ;
提供所需的值
tidied
答案 2 :(得分:0)