我将使用正则表达式验证IR手机号码,但它与之不匹配!例如' 09126104851'。 有什么问题?
"^09[123456789]{2}(^0[123456789]{1}[0-9]{6}|[123456789]{1}[0-9]{7})$"
答案 0 :(得分:1)
因为正则表达式中间有^
符号。
^
表示“在字符串的开头”。
你需要来自@msd的正则表达式:^09\d{9}$
答案 1 :(得分:1)
你的表达相当于:
^09[1-9]{2}(^0[1-9]{1}[0-9]{6}|[1-9]{1}[0-9]{7})$
其中也可以写得更短:
^09[1-9]{2}(^0[1-9]{1}\d{6}|[1-9]{1}\d{7})$
现在你在^0
中间出错了。可能你想要[^0]
(一切都不为零):
^09[1-9]{2}([^0][1-9]{1}\d{6}|[1-9]{1}\d{7})$
但最大的问题是这部分:
09[1-9]{2}
匹配总共4位数[^0][1-9]{1}\d{6}
匹配总共8位数[1-9]{1}\d{7}
也匹配8位数字因此,您尝试匹配8 + 4 = 12位数,而电话号码则为11。
我打赌你希望表达:
^09[1-9]{2}([1-9]{1}\d{6}|[1-9]{1}\d{6})$
现在您将注意到|
之前和之后的交替匹配
相同 !所以这使表达更小:
^09[1-9]{2}([1-9]{1}\d{6})$
如果我们可以驳回最后7位数的分组 - 我们会注意到类似的部分:
[1-9]{2}
和[1-9]{1}
。这可以进一步减少表达式:
^09[1-9]{3}\d{6}$
答案 2 :(得分:0)
请改用此正则表达式:"^09\d{9}$"
例如:
System.Text.RegularExpressions.Regex.IsMatch("09126104851", @"^09\d{9}$")
在小提琴上查看:https://dotnetfiddle.net/8quyvL