首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >红外手机号码的正则表达式

红外手机号码的正则表达式
EN

Stack Overflow用户
提问于 2017-05-13 10:04:32
回答 2查看 262关注 0票数 1

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

代码语言:javascript
复制
"^09[123456789]{2}(^0[123456789]{1}[0-9]{6}|[123456789]{1}[0-9]{7})$"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-13 11:46:17

您的表达式相当于:

代码语言:javascript
复制
^09[1-9]{2}(^0[1-9]{1}[0-9]{6}|[1-9]{1}[0-9]{7})$

它也可以写得更短,如:

代码语言:javascript
复制
^09[1-9]{2}(^0[1-9]{1}\d{6}|[1-9]{1}\d{7})$

现在,您在中间犯了一个错误,就是^0。您可能需要[^0] (一切都不是零):

代码语言:javascript
复制
^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数字。

我敢打赌你想表达:

代码语言:javascript
复制
^09[1-9]{2}([1-9]{1}\d{6}|[1-9]{1}\d{6})$

现在您会注意到,|前后的交替匹配是相同的!因此,这使得表达式更小:

代码语言:javascript
复制
^09[1-9]{2}([1-9]{1}\d{6})$

如果我们能排除最后7位数的分组,我们会注意到类似的部分:[1-9]{2}[1-9]{1}。这样可以进一步减少表达:

代码语言:javascript
复制
^09[1-9]{3}\d{6}$

演示

票数 1
EN

Stack Overflow用户

发布于 2017-05-13 11:27:03

因为正则表达式中间有^符号。^的意思是“在字符串的开头”。您需要来自@msd:^09\d{9}$的regex

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43951815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档