首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式练习考试不明白为什么

正则表达式练习考试不明白为什么
EN

Stack Overflow用户
提问于 2014-02-19 14:28:51
回答 3查看 699关注 0票数 1

我遇到一个练习试题,它问:

给出一个9位数字的正则表达式,允许在第二个和第五个字符之后选择连字符。

给出的答案是:

代码语言:javascript
复制
  /^[0-9]{3}\^?[0-9]{2}\^?[0-9]{4}$/

我不明白为什么会这样。谁能解释一下原因吗?如果这是错误的,那么正确的答案是什么?它不包括连字符-当然应该有一个连字符在插入符号的位置。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-19 14:34:58

它不包括连字符-当然应该有一个连字符在插入符号的位置。

是的确实如此。

如果这是错误的,那么正确的答案是什么?

代码语言:javascript
复制
/^[0-9]{2}-?[0-9]{3}-?[0-9]{4}$/

代码语言:javascript
复制
/^\d{2}-?\d{3}-?\d{4}$/
票数 3
EN

Stack Overflow用户

发布于 2014-02-19 14:44:01

对不对?

德布盖克斯上很容易检查给你的答案

代码语言:javascript
复制
^[0-9]{3}\^?[0-9]{2}\^?[0-9]{4}$

第一个^确保与行的开头匹配,最后一个$与该行的末尾匹配。它确实匹配9位数字总数(第一组3,然后组2,最后一组4位数字)。它确实允许在第三个和第五个字符之后使用可选字符^。因此,我在给出的答案中看到了两个错误:

  • 错误的字符^而不是-
  • 错误的位置:在第三和第五之后,而不是第二和第五。

例如,当下列示例不正确时,它们将被接受:

  • 12345^6789
  • 123^456789
  • 123^45^6789

正确答案

只要尽可能少的改变,你就可以用得到一些正确的东西

代码语言:javascript
复制
^[0-9]{2}-?[0-9]{3}-?[0-9]{4}$

我只需更改计数器,以允许在第2位和第5位之后的可选字符,并确保分隔符是-

例如,现在将接受以下内容,正如它们应该接受的那样(而给出的答案将拒绝它们):

  • 12345-6789
  • 12-3456789
  • 12-345-6789

最好的答案

您可能可以将0-9替换为\d,这是“位”的快捷方式。

票数 3
EN

Stack Overflow用户

发布于 2014-02-19 14:32:01

你在寻找一个简单得多的Regex:

代码语言:javascript
复制
^\d{2}-?\d{3}-?\d{4}$
     ^ - optional dash after the 2nd character
            ^ - optional dash after the 5th character

Debuggex Demo

对于O.R.Mapper的评论,如果认为是一个可行的Regex,根据问题陈述,就不是。

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

https://stackoverflow.com/questions/21883462

复制
相关文章

相似问题

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