我正在尝试编写一个验证日期的正则表达式。正则表达式需要匹配以下格式
,并且不应与DD-MM / YYYY之类的格式匹配。
我已经尝试过此正则表达式
'^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$'
但是我只能以mm / dd / yyyy或mm-dd-yyyy或mm.dd.yyyy格式提取日期。
我也尝试使用这个(?:\ d {2}){1,2} [-| / |。] \ d {2}-| / |。{1,2},在这里我得到日期但我也得到了像5542-21-54、99 / 01/2019这样的值,它不代表日期。
谢谢大家的帮助。
答案 0 :(得分:0)
如果您想匹配天数,则需要执行此正则表达式:
((1|2)[0-9]|3[0-1]|0?[1-9])
您需要的月份:
(0?[1-9]|1[0-2])
您需要的年份(只有1900和2000,对于3000,您可能需要在2999年到货时更新脚本):
((19|20)?[0-9]{2})
在使用不同的定界符和日期顺序后,所以:
((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2])\/((19|20)?[0-9]{2}) # for DD/MM/YYYY
((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2])\-((19|20)?[0-9]{2}) # for DD-MM-YYYY
((19|20)?[0-9]{2})\/((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2]) # for YYYY/DD/MM
((19|20)?[0-9]{2})\-((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2]) # for YYYY-DD-MM
...
最后,您需要将它们组合在一起,并与(expression1|expression2|...)
进行一次匹配:
\W(((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2])\/((19|20)?[0-9]{2})|((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2])\-((19|20)?[0-9]{2})|((19|20)?[0-9]{2})\/((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2])|((19|20)?[0-9]{2})\-((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2]))\W
我需要在正则表达式的开头和结尾处使用\W
。这一检查您是否有东西(\ s,\;,\等)。
您需要完成缺少的组合。
享受;)