Javascript regex验证日期并以DDMMYY格式限制日期范围

Javascript regex验证日期并以DDMMYY格式限制日期范围,javascript,regex,date,Javascript,Regex,Date,我正在寻找一个正则表达式来验证以下格式AaaD DDMMYY HH MM,尽管下面的表达式适用于所有在线测试,但它不适用于允许我们输入预设正则表达式的应用程序前端 我们正在尝试使用regex来允许这些日期范围从010120到311299(1920年1月1日到1999年12月31日) 请使用更好的正则表达式 待匹配的样本输入为aadd-111199-01-01 该输入aadd-111100-01-01不应匹配 ^([a-zA-Z]{4}-+(0[1-9]|1[0-9]|2[0-9]|3[0-1])

我正在寻找一个正则表达式来验证以下格式AaaD DDMMYY HH MM,尽管下面的表达式适用于所有在线测试,但它不适用于允许我们输入预设正则表达式的应用程序前端

我们正在尝试使用regex来允许这些日期范围从010120到311299(1920年1月1日到1999年12月31日)

请使用更好的正则表达式

待匹配的样本输入为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编写的,这里有一个稍微清理过的版本,尽管我不确定它是否能解决正则表达式在应用程序前端不工作的问题:

^(([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}))$
您不应该在捕获组之后分配中继器(每个组后面都有一个“+”)。当您这样做时,如果组的内容被重复,则在backreference中只捕获最后一次迭代(对于您的字符串,我认为不太可能重复,但您假设捕获组需要“至少存在一次”,但由于捕获组只捕获其周围的内容,因此它本身并不意味着需要量词的字符或字符组)。如果需要,在捕获组中重复(如“+”或“*”或{n})更有意义

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


此外,正如@pzp所提到的,对于RegEx来说,检测每个月的正确日期数是一个挑战。如果您想要验证给定的日期,那么我建议一些库在通过正则表达式的格式验证后检查该日期。例如,如果您在应用程序前端使用JavaScript,您可以签出或。

您希望它匹配和不匹配的示例输入是什么?什么是
AaaD
?月份的格式是字母(一月、二月、十二月)还是数字(01、02、12)?你想用它来解释月份有不同天数的事实吗?例如,您是否关心9月31日是否通过正则表达式?请提供一些您想要匹配和不匹配的字符串示例?@GeorgeAppiahSarfo
aadd
代表什么?你真的想匹配那些角色吗?它们代表字母吗?它应该是小写字母吗?它是小写和大写的混合体letters@JustAnotherCoder要匹配的示例输入是aadd-111199-01-01此输入aadd-111100-01-01不应匹配前端应用程序是用java编写的