我正在尝试使用RegEx验证用户对日期/时间字段的输入,格式如下:由于用户将一次键入这一个字符,所以RegEx还需要允许所有子串(例如,yyyy-mm
、yyyy-mm-dd H
等)。
例如,下面的日期2022-01-29 11:59
或它的任何子字符串,如(空字符串)、202
、2022-01-
、2022-01-29
等应匹配。类似2022-13
、222-
或2024-01-01 23:111
的字符串不应匹配。
我在尝试,
[0-9]{4}?-?(0[1-9]|1[0-2])-?(0[1-9]|[1-2][0-9]|3[0-1])? ?(2[0-3]|[01][0-9])?:?[0-5]?[0-9]?$
使每个字符都是可选的,但它不起作用,因为它可能只是跳过字符串的一部分,例如2022-29
返回match...
1条答案
按热度按时间qojgxg4l1#
如果你想在输入的时候正确匹配数字范围,这就有点复杂了。下面是一个正则表达式解决方案,它有很多嵌套的组(允许部分输入),并验证月、日、小时和分钟的范围:
输出:
正则表达式的层次结构:
^(
-字符串和组的开始[0-9]{0,3}
--0至3位数,部分年份|
-逻辑或-
--破折号(
--[01]
--月份的一位数字|
-逻辑或(0[1-9]|1[0-2])
--月份的两位数字-
--破折号[0-3]
--日期的一位数字|
-逻辑或(0[1-9]|[12][0-9]|3[01])
--两位数字的日期(
--[0-2]
--一位数的小时|
-逻辑或([0-1][0-9]|2[0-3])
--两位数的小时:
-冒号[0-5]
--分钟的一位数|
-逻辑或([0-4][0-9]|5[0-9])
--两位数的分钟)?
--)?
--)$
-字符串和组的结尾了解有关regex的更多信息:https://twiki.org/cgi-bin/view/Codev/TWikiPresentation2018x10x14Regex