如何验证带ET时区的两种日期时间格式?
匹配指定日期格式的正则表达式解决方案
你需要匹配的是两种美式日期格式:MM-DD-YYYY HH:MM AM/PM ET 或 MM/DD/YYYY HH:MM AM/PM ET,之前使用的正则是针对ISO 8601格式(YYYY-MM-DDTHH:MM:SSZ)的,自然无法匹配目标格式。
推荐正则表达式(严格校验版)
^(0[1-9]|1[0-2])([-/])(0[1-9]|[12]\d|3[01])\2\d{4}\s(0[1-9]|1[0-2]):([0-5]\d)\s(AM|PM)\sET$
正则各部分解释
^(0[1-9]|1[0-2]):匹配合法月份(01-12)([-/]):匹配日期分隔符-或/,用捕获组\2保证整个日期的分隔符统一(避免出现MM/DD-YYYY这种混合格式)(0[1-9]|[12]\d|3[01]):匹配合法日期(01-31)\2\d{4}:复用之前的分隔符,匹配4位年份\s(0[1-9]|1[0-2]):([0-5]\d):匹配12小时制的时间(01-12点,00-59分),前后带空格\s(AM|PM)\sET$:匹配AM/PM标识和时区ET,结尾固定为ET
测试示例
匹配成功的案例
06-01-2023 11:59 PM ET12/31/2024 09:05 AM ET01/01/2020 12:00 PM ET
匹配失败的案例
06/01-2023 11:59 PM ET(分隔符不统一)13-01-2023 11:59 PM ET(月份超出范围)06-32-2023 11:59 PM ET(日期超出范围)06-01-2023 13:59 PM ET(小时不符合12小时制)06-01-2023 11:60 PM ET(分钟超出范围)06-01-2023 11:59 PM(缺少ET标识)
如果不需要严格校验月份、日期的合法性,只匹配格式的话,可以用简化版:
^\d{2}([-/])\d{2}\1\d{4}\s\d{2}:\d{2}\s(AM|PM)\sET$
内容的提问来源于stack exchange,提问作者iDan
相关产品推荐
相关产品推荐

