我遇到一个练习试题,它问:
给出一个9位数字的正则表达式,允许在第二个和第五个字符之后选择连字符。
给出的答案是:
/^[0-9]{3}\^?[0-9]{2}\^?[0-9]{4}$/我不明白为什么会这样。谁能解释一下原因吗?如果这是错误的,那么正确的答案是什么?它不包括连字符-当然应该有一个连字符在插入符号的位置。
发布于 2014-02-19 14:34:58
它不包括连字符-当然应该有一个连字符在插入符号的位置。
是的确实如此。
如果这是错误的,那么正确的答案是什么?
/^[0-9]{2}-?[0-9]{3}-?[0-9]{4}$/或
/^\d{2}-?\d{3}-?\d{4}$/发布于 2014-02-19 14:44:01
对不对?
在德布盖克斯上很容易检查给你的答案
^[0-9]{3}\^?[0-9]{2}\^?[0-9]{4}$

第一个^确保与行的开头匹配,最后一个$与该行的末尾匹配。它确实匹配9位数字总数(第一组3,然后组2,最后一组4位数字)。它确实允许在第三个和第五个字符之后使用可选字符^。因此,我在给出的答案中看到了两个错误:
^而不是-例如,当下列示例不正确时,它们将被接受:
12345^6789123^456789123^45^6789正确答案
只要尽可能少的改变,你就可以用这得到一些正确的东西
^[0-9]{2}-?[0-9]{3}-?[0-9]{4}$

我只需更改计数器,以允许在第2位和第5位之后的可选字符,并确保分隔符是-。
例如,现在将接受以下内容,正如它们应该接受的那样(而给出的答案将拒绝它们):
12345-678912-345678912-345-6789最好的答案
您可能可以将0-9替换为\d,这是“位”的快捷方式。
发布于 2014-02-19 14:32:01
你在寻找一个简单得多的Regex:
^\d{2}-?\d{3}-?\d{4}$
^ - optional dash after the 2nd character
^ - optional dash after the 5th character

对于O.R.Mapper的评论,如果认为是一个可行的Regex,根据问题陈述,就不是。。
https://stackoverflow.com/questions/21883462
复制相似问题