此问题旨在成为将类似问题作为副本关闭的目标。
我写了一个似乎主要工作的正则表达式,除了它允许输入中的内容超出表达式的结尾。
正则表达式:/(\d{4})-(\d{2})-(\d{2})/
应与ISO格式的日期匹配,但它与2014-11-123456
,12342014-11-12
匹配,甚至与a1234-56-78z
之类的非数字匹配。
我做错了什么?
答案 0 :(得分:-2)
正则表达式在搜索字符串中搜索模式。这意味着如果正则表达式从任何地方开始匹配,并在任何地方结束,那么它被认为是有效的。在给出的例子中:
2014-11-123456
,12342014-11-12
和a1234-56-78z
都匹配其中的正则表达式。
这是正常和预期的行为。在结果集中,您将总共有四个元素:
[0]: 2014-11-12 (whole match)
[1]: 2014 (first subpattern)
[2]: 11 (second subpattern)
[3]: 12 (third subpattern)
如果要验证模式是否与整个字符串匹配,仅该字符串,则必须使用^
(字符串开头)和$
来锚定正则表达式(字符串的结尾)。你的正则表达式会变成:
/^(\d{4})-(\d{2})-(\d{2})$/
这将阻止您的任何给定示例匹配,因为它们不相应地匹配字符串开头和结尾的开头和结尾。