我遇到了一个练习题考试问题:
为九位数字提供正则表达式,允许在第二个和第五个字符后面加上可选的连字符
给出的答案是:
/^[0-9]{3}\^?[0-9]{2}\^?[0-9]{4}$/
我不明白为什么会这样。有人可以解释一下原因吗?如果这是错的,那么正确的答案是什么?它不包括连字符 - 插入符号确实应该有一个连字符。
答案 0 :(得分:3)
确实是的。它不包括连字符 - 插入符号确实应该有一个连字符。
如果错了,那么正确答案是什么?
/^[0-9]{2}-?[0-9]{3}-?[0-9]{4}$/
或
/^\d{2}-?\d{3}-?\d{4}$/
答案 1 :(得分:3)
很容易检查Debuggex上给你的答案:
^[0-9]{3}\^?[0-9]{2}\^?[0-9]{4}$
第一个^
确保您匹配一行的开头,而最后一个$
匹配该行的结尾。它确实匹配总共9位数(第一组3,然后是一组2,最后是一组4位)。它允许在第三个和第五个字符后面包含可选字符^
。因此,我在给出的答案中看到两个错误:
^
而不是-
例如,以下示例在不正确时将被接受:
12345^6789
123^456789
123^45^6789
通过尽可能少的更改,您可以使用this:
找到正确的结果^[0-9]{2}-?[0-9]{3}-?[0-9]{4}$
我只是更改了计数器,允许第2位和第5位后面的可选字符,并确保分隔符为-
。
例如,现在接受以下内容,因为它们应该(虽然给定的答案会拒绝它们!):
12345-6789
12-3456789
12-345-6789
您可以将\ [0-9]替换为\ d,“数字”的快捷方式。
答案 2 :(得分:1)
你正在寻找一个更简单的正则表达式:
^\d{2}-?\d{3}-?\d{4}$
^ - optional dash after the 2nd character
^ - optional dash after the 5th character
和OR Mapper发表的评论,如果假设是一个可行的正则表达式,基于问题陈述, 它不是。 < /强>