我在Java中使用了这个正则表达式,如下所示:
private static final String DATE_TIME_REGEX = "^(20[1-5]\\d)-(0?[1-9]|1[012])-(0?[1-9]|[12]\\d|3[01])\\s([0-1]\\d)|(2[0-3]):([0-5]\\d):([0-5]\\d)$";
public static boolean validateDate(String dateStr) {
return dateStr.matches(DATE_TIME_REGEX);
}
...验证此格式的日期:
private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDate = dateTimeFormatter.format(LocalDateTime.now());
...使用此在线工具
https://regexr.com/
...其中添加此正则表达式:
^(20[1-5]\d)-(0?[1-9]|1[012])-(0?[1-9]|[12]\d|3[01])\s([0-1]\d)|(2[0-3]):([0-5]\d):([0-5]\d)$
...可以很好地验证日期字符串,例如:
2022-11-02 00:00:00
...但无法使用前面提到的java验证代码进行验证(没有具体说明)
为了排除我能想到的唯一警告--当把在线工具中的代码添加到java代码中时,我不得不在从在线工具中移动它时,在regex模式中的其他反斜杠之前添加一个额外的\,即\d and \s -> \\d and \\s
。
1条答案
按热度按时间bxfogqkk1#
该模式包含一个看起来不合适的组和替换:
这使您的current pattern match regex101
[0-1]\d
小时部分交替的左侧部分2[0-3]
小时部分到 * 结束 * 的右侧部分将此函数与
matches()
一起使用无法正常工作,因为它获得了匹配的against the full string:public boolean matches()
尝试将整个区域与模式匹配。
如果匹配成功,则可以获得更多信息......
通过修复结构进行重构,它可以正常工作(使用
matches
,^
和$
是 * 冗余的 *)。请参见www.example.com上的Java演示tio.run或demo at regex101(模式说明和代码生成器)