如何为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代替空格?

感谢大卫

如何为ISO8601格式编写带或不带连字符的出生日期正则表达式

对空格使用量词*: ( *|-)*的含义是:无限次之间,尽可能多的次数,根据需要给予

这意味着,目前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不会。这对于维护目的非常有用,如果你想在不久的将来允许另一个分隔符,你只需要更新一个地方,工作就完成了。