我想要一个正则表达式来验证ISO 8601格式的出生日期,如下所示:1987-10-20并且没有连字符19871020。
正则表达式我使用连字符:
> @"^(19|20)[0-9]{2}[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])$";
这个接受空格或连字符
@"^(19|20)[0-9]{2}( *|-)(0[1-9]|1[012])( *|-)(0[1-9]|[12][0-9]|3[01])$";
如何编写 nothing 而不是空格?
由于
大卫
答案 0 :(得分:1)
您正在使用量词*
作为空格:( *|-)
。 *
的含义是:在零和无限之间,尽可能多次,根据需要回馈
这意味着,截至目前19871020
将被接受为1987 10 20
甚至1987 1020
我建议使用后向引用和捕获组:
@"^(19|20)[0-9]{2}([ -]?)(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$";
([ -]?)
将允许0或1个空格或-
和\2
将引用所使用的第一个分隔符。因此1987-10-20
将被接受,而198710-20
则不会。这对于维护非常有用,如果你想在不久的将来允许另一个分隔符,你将只需要更新一个地方就可以完成这项工作。