首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个正则表达式可以简化吗?

这个正则表达式可以简化吗?
EN

Stack Overflow用户
提问于 2015-04-06 18:25:51
回答 3查看 62关注 0票数 0

我有这样的判决:

代码语言:javascript
运行
复制
^(\(\d{3}\)[ ]?\d{3}-\d{4})|(\d{3}\.\d{3}\.\d{4})|(\d{3}\-\d{3}\-\d{4})|[0-9]{10}$

我只需要这些电话号码格式来匹配:

  • (555) 555-5555
  • (555)555-5555
  • 555-555-5555
  • 555.555.5555
  • 5555555555

有任何方法来简化我当前的正则表达式吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-06 18:32:06

RegexBuddy显示:

代码语言:javascript
运行
复制
\(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}\b
票数 2
EN

Stack Overflow用户

发布于 2015-04-06 18:36:56

就个人而言,我不会费心验证用户的格式。无论你想出什么,在某些情况下都可能会失败。我认为更好的做法是接受宽松的输入,并尽力纠正。

老实说,当你只需要10位数的时候,谁在乎()-.呢?您可以轻松地将格式添加到后端。

相反,我会做这样的事

代码语言:javascript
运行
复制
// ugly user input, but still valid
var userInput = "(500) 423.2345";

// remove all non-digits
var phone = userInput.replace(/\D/g, '');
//=> "5004232345"

// verify that 10 digits are present
if (phone.length !== 10) {
  alert("invalid phone number");
}

然后,您可以将数字以任意格式存储。

代码语言:javascript
运行
复制
// example
[
  "(",
  phone.substr(0,3),
  ")",
  phone.substr(3,3),
  "-",
  phone.substr(6,4)
].join(" ")

// "( 500 ) 423 - 2345"
票数 2
EN

Stack Overflow用户

发布于 2015-04-06 19:02:00

如果使用捕获组捕获分隔符,使用反向引用\1重用分隔符,则可以稍微简化一些,并避免使用几种替代方法:

代码语言:javascript
运行
复制
^(?:\(\d{3}\) ?\d{3}-\d{4}|\d{3}([.-]?)\d{3}\1\d{4})$
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29477181

复制
相关文章

相似问题

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