我将使用正则表达式验证IR手机号码,但它不匹配!例如“09126104851”。有什么问题吗?
"^09[123456789]{2}(^0[123456789]{1}[0-9]{6}|[123456789]{1}[0-9]{7})$"发布于 2017-05-13 11:46:17
您的表达式相当于:
^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位数字。因此,当电话号码为11时,您正在尝试匹配8+4=12数字。
我敢打赌你想表达:
^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}$发布于 2017-05-13 11:27:03
因为正则表达式中间有^符号。^的意思是“在字符串的开头”。您需要来自@msd:^09\d{9}$的regex
https://stackoverflow.com/questions/43951815
复制相似问题