我正在阅读包含YYYYMMDD
格式的行的文件。如何使用regular expressions
检查这些行的有效性?谢谢。该应用程序是Java
应用程序。
答案 0 :(得分:8)
正则表达式是不可能的。您将如何考虑闰年?你应该尝试解析日期。如果parse抛出异常,则日期错误:
SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");
f.setLenient(false); <-- by default SimpleDateFormat allows 20010132
try {
f.parse(str);
// good
} catch (ParseExcepton e) {
// bad
}
答案 1 :(得分:5)
您最好使用SimpleDateFormat
和setLenient(false);
来验证日期字符串
答案 2 :(得分:1)
DateFormat
。
public static boolean isValidDate(String date) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.setLenient(false);
sdf.parse(date);
}
catch (Exception e) {
return false;
}
return true;
}
有用link
答案 3 :(得分:1)
@ EvgeniyDorofeev,@ JigarJoshi和@StinePike的答案是正确的。但我建议批量数据处理采用略有不同的方法来避免基于昂贵的ParseException的逻辑。
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.setLenient(false);
for (String line : lines) { // lines from your source
ParsePosition pos = new ParsePosition(0);
Date date = sdf.parse(line, pos);
boolean valid = (date != null);
// here you can continue with processing the single line
// can even evaluate the line number and error offset in line
}
关于正则表达式的一个评论:你如何在这样的正则表达式中检查格里高利历法规则?月份有不同的长度,有闰年等等。
答案 4 :(得分:0)
对于检查日期,正则表达式无效。但是,话虽如此,如果你真的想要正则表达式,请查看link