如何为ISO8601格式编写带或不带连字符的出生日期正则表达式
本文关键字:连字符 正则表达式 出生日期 ISO8601 格式 | 更新日期: 2023-09-27 17:53:15
我想要一个正则表达式来验证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代替空格?
感谢大卫对空格使用量词*
: ( *|-)
。*
的含义是:在零和无限次之间,尽可能多的次数,根据需要给予
这意味着,目前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
不会。这对于维护目的非常有用,如果你想在不久的将来允许另一个分隔符,你只需要更新一个地方,工作就完成了。