用于验证字符串的正则表达式,日期格式 YYYYMMDD,不带分隔符 + 5 个自由数字



我需要使用正则表达式来验证下一个规则:

•前 8 个字符应采用 YYYYMMDD 的"日期"格式,不带 分隔符

•表达式总长度应为 13 个字符

我使用内部正则表达式管理器

Java代码示例:

import java.util.regex.Pattern;

public class TestDate {
public static final Pattern datePattern = Pattern.compile("** Need RegEx **");
public static void main(String[] args) {
System.out.println(datePattern.matcher("1996022965789").matches()); 
// -Wrong value 
System.out.println(datePattern.matcher("1996022865789").matches()); 
// -Correct value 
}
}

输入值和预期结果的示例:

输入:201909866666结果:长度错误

输入:2019022966666结果:错误的日期值

输入:2019022866666结果:正确

不要使用正则表达式来验证日期。这太复杂了。使用LocalDateDateTimeFormatter。这是一个根本不使用任何正则表达式的解决方案。如果您愿意,您也可以使用正则表达式来检查日期后的 5 个字符是否为数字。

public void testDate(String dateString) {
if (dateString.length() == 13) {
// Check date part, first 8 digits
try {
LocalDate.parse(dateString.substring(0, 8), DateTimeFormatter.BASIC_ISO_DATE);
boolean allDigits = dateString.chars().allMatch(Character::isDigit);
if (allDigits) {
System.out.println(dateString + ": correct");
} else {
System.out.println(dateString + ": wrong character, must be digits");
}
} catch (DateTimeParseException dtpe) {
System.out.println(dateString + ": invalid date value");
}
} else {
System.out.println(dateString + ": wrong length");
}
}

让我们尝试一下:

testDate("1996022965789");
testDate("1996022865789");
testDate("201909866666");
testDate("2019022966666");

输出为:

1996022965789: correct
1996022865789: correct
201909866666: wrong length
2019022966666: invalid date value

对于第一个结果,1996 年是闰年,因此当年确实存在 2 月 29 日。最后一个结果显示无效的日期值,因为 2019 年不是闰年。

如果日期无效,LocalDate.parse会抛出一个DateTimeParseException,在这种情况下,我们会捕获并用于打印正确的消息。如果您愿意,您可以润色消息;就目前而言,它们可能太短且不是很用户友好。

相关内容

  • 没有找到相关文章

最新更新