我正在使用以下正则表达式来覆盖国际电话号码和一些本地电话号码,这些电话号码只能采用这种格式
国际电话号码
+123 456789123
+123456789123
+12 3456789123
+123456789123
Run Code Online (Sandbox Code Playgroud)
本地电话号码格式(手机号码,后接固定电话号码)
1234567890
123 4567890
123123456
12 3123456
Run Code Online (Sandbox Code Playgroud)
我正在使用的正则表达式
^[\+]{0,1}[1-9]{1}[0-9]{7,11}$
Run Code Online (Sandbox Code Playgroud)
此正则表达式仅与国际数字配合使用,无论+ 是否添加前缀,但都不允许使用空格字符。
我希望它支持上述格式,例如示例所示,并且还应该支持所有国际电话号码
我正在asp.net上工作,以防万一有人想知道。
更新:
我最终使用以下正则表达式来处理扩展
^([\+]?[0-9]{1,3}[\s.-][0-9]{1,12})([\s.-]?[0-9]{1,4}?)$
Run Code Online (Sandbox Code Playgroud)
嗨,一些关于你是正则表达式的评论
[\+]{0,1} could be \+? // easier to read, + as optional
[1-9]{1} could be writen as [1-9]
[0-9]{7,11} should be [0-9\s.-]{7,11} // phone numbers van contain - or .
Run Code Online (Sandbox Code Playgroud)
您完全正则表达式将是
^\+?[1-9][0-9\s.-]{7,11}$
Run Code Online (Sandbox Code Playgroud)
电话号码可以写为
第二次尝试
您可以通过以下两个步骤解决您的问题:
将首个匹配的电话号码范围从11增加到20
^\+?[1-9][0-9\s.-]{7,20}$
下一步是删除非数字并验证长度在8到12之间
string phone = "070.3233123";
string onlyNumbers= new String(phone.ToCharArray().Where(c => Char.IsDigit(c)).ToArray());
if (onlyNumbers.length > 8 && onlyNumbers.length < 12)
{
// we got a winner
}
Run Code Online (Sandbox Code Playgroud)