IR手机号码的正则表达式

时间:2017-05-13 10:04:33

标签: c# regex

我将使用正则表达式验证IR手机号码,但它与之不匹配!例如' 09126104851'。 有什么问题?

"^09[123456789]{2}(^0[123456789]{1}[0-9]{6}|[123456789]{1}[0-9]{7})$"

3 个答案:

答案 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}$

Demo

答案 2 :(得分:0)

请改用此正则表达式:"^09\d{9}$"

例如:

System.Text.RegularExpressions.Regex.IsMatch("09126104851", @"^09\d{9}$")

在小提琴上查看:https://dotnetfiddle.net/8quyvL