目前我正在编写一个正则表达式来验证日期时间字符串。基本格式是
(Date)(?: *,?)(Time)
我已经计算出正则表达式的日期和时间部分就好了,但我无法让正则表达式允许所有这三种情况:
简单的方法(使所有三个部分都可选)具有允许案例
的意外副作用这可以通过环顾来实现吗?
示例有效输入:
January 25 2004, 10:30 PM
2004-1-25
10:30 PM
输入无效:
,
(日期和时间正则表达式处理了一堆案例,我已经解决了这个问题 - 它阻止了无效案例,同时允许我仍然需要的所有三种形式。)
答案 0 :(得分:2)
如果您将分隔符包含日期或时间组,则分隔符本身将不匹配:
^(DATE(?: *,? *))?(TIME)?$
它有一个可选的日期和分隔符,后跟一个可选的时间。
答案 1 :(得分:0)
您可以使用替换:
((Date)((?: *,?)(Time))?|((Date)(?: *,?))?(Time))
虽然会导致一些重复。
答案 2 :(得分:0)
我想我找到了一个有效的解决方案。我在开头使用前瞻来验证它不是以分隔符开头...然后使分隔符成为时间段的可选部分。
/^(?=[A-Za-z0-9])(Date)(?:(?:Separator)?(Time))$/
例如,要使用YYYY-MM-DD
格式的日期和格式HH:ii
和分隔符, *| +
(可选逗号和一个或多个空格)的时间来验证日期时间,它会是
/^(?=[0-9])(?:([0-9]{4})-([0-9]{2})-([0-9]{2}))?(?:(?:, *| +)?([0-9]{2}:[0-9]{2}))?$/