我正在寻找一个正则表达式来验证以下格式AaaD,尽管下面的表达式在所有在线测试http://www.freeformatter.com/regex-tester.html上都有效,但它在应用程序的前端不工作,这允许我们输入一个预置正则表达式。
我们正在尝试使用regex来允许这些日期范围从010120到311299 (1920年1月1日至1999年12月31日)。
请协助更好的REGEX
要匹配的示例输入是aadd-111199-01-01。
此输入aadd-111100-01-01不应匹配。
^((a-zA-Z{4}-)+(01-9|10-9|20-9|30-1)+(01-9|10-2)+((2-9)-)+(\d{2}-)+(\d{2}))$
我试图更新regex的前端应用程序是用java编写的。
发布于 2015-12-01 01:20:32
这里有一个稍微清理过的版本,但我不确定它是否会解决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巴迪工具。
而且,就像@pzp提到的那样,使用RegEx来检测每个月的正确日期是很困难的。如果您想要验证给定的日期,那么我建议一些库在它通过RegEx格式验证之后检查它的日期。例如,如果在应用程序的前端使用JavaScript,则可以签出Moment.js或达特杰。
https://stackoverflow.com/questions/34009551
复制相似问题