繁体   English   中英

正则表达式验证日期并以DDMMYY格式限制日期范围

[英]regex to validate date and limit the date range in the format DDMMYY

我正在寻找一个正则表达式来验证以下格式的AaaD-DDMMYY-HH-MM,尽管以下表达式适用于所有在线测试http://www.freeformatter.com/regex-tester.html ,但不适用于前端允许我们输入预设正则表达式的应用程序。

我们正在尝试使用正则表达式来允许这些日期范围为010120至311299(1920年1月1日至1999年12月31日)。

请协助更好的REGEX

要匹配的样本输入为aadd-111199-01-01

此输入aadd-111100-01-01不匹配

^(([[a-zA-Z] {4}-)+(0 [1-9] | 1 [0-9] | 2 [0-9] | 3 [0-1])+(0 [1 -9] | 1 [0-2])+(([[2-9] [1-9])-)+(\\ d {2}-)+(\\ d {2}))$

我正在尝试更新正则表达式的前端应用程序是用Java编写的

这是一个稍作清理的版本,尽管我不确定它是否能解决您的RegEx在您的应用程序前端无法正常工作的问题:

^(([a-zA-Z]{4})-(0[1-9]|1[0-9]|2[0-9]|3[0-1])(0[1-9]|1[0-2])([2-9][1-9])-(\d{2})-(\d{2}))$

您不应在捕获组之后分配中继器(每个中继器后面都有一个“ +”)。 这样做时,如果重复该组的内容,则只会在反向引用中捕获最后一次迭代(对于字符串,我认为重复是不太可能的,但是您已经假定捕获组将需要“至少存在”一次”,但由于捕获组仅捕获其周围的内容,因此它本身并不表示需要量词的字符或字符组。 如果需要, 捕获组内部重复(例如'+'或'*'或{n})更有意义。

您在捕获组中也有连字符,这不太可能(?),因为它会使反向引用内容的解析更具挑战性。 但除此之外,给定的RegEx将您的示例字符串与PCRE RegEx匹配。 您的前端应用程序是用什么创建的? 它使用PCRE还是其他RegEx风味( 这里是各种RegEx风味的良好参考)? 如果您对正则表达式做了很多工作,我也建议您使用RegEx Buddy工具。

另外,就像提到的@pzp一样,使用RegEx很难检测每个月的正确日期数。 如果要验证给定日期,那么我建议一些库在通过RegEx通过格式验证后检查日期。 例如,如果您在应用程序的前端使用JavaScript,则可以签出Moment.jsDatejs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM