Проверка проверки даты с использованием регулярного выражения, как это работает на дату, но не на год? .Пожалуйста, помогите мне решить эту проблему.Regex for Java Дата проверки
Выход:
false
true
false
true
Ожидаемый результат:
false
false
false
false
public static void main(String args[])
{
System.out.println(dateFormatValidate("ddMMyyyy","^(0?[1-9]|[12][0-9]|3[01])(0?[1-9]|1[012])((19|20)\\d\\d)?", "08s21988"));
System.out.println(dateFormatValidate("ddMMyyyy","^(0?[1-9]|[12][0-9]|3[01])(0?[1-9]|1[012])((19|20)\\d\\d)?", "08021s88"));
System.out.println(dateFormatValidate("ddMMyyyy","^(0?[1-9]|[12][0-9]|3[01])(0?[1-9]|1[012])((19|20)\\d\\d)?", "s8021988"));
System.out.println(dateFormatValidate("ddMMyyyy","^(0?[1-9]|[12][0-9]|3[01])(0?[1-9]|1[012])((19|20)\\d\\d)?", "0802198s"));
}
public static boolean dateFormatValidate(String format, String regex, String value) {
try {
if (value != null && !"".equals(value.trim()) && format != null && !"".equals(format.trim()))
{
if ((regex != null && !"".equals(regex.trim()) && Pattern.matches(regex, value)) || regex != null || "".equals(regex))
{
SimpleDateFormat dformat = new SimpleDateFormat(format);
dformat.setLenient(false);
dformat.parse(value);
return true;
} else
return false;
} else
return false;
} catch (Exception e) {
return false;
}
}
Если бы я был вами, я wil 'org.apache.commons.lang.time.DateUtils # parseDate' и поймал исключение – farmer1992
Зачем вам нужны регулярные выражения? Вы уже устанавливаете 'lenient = false', поэтому SimpleDateFormat должен улавливать все недопустимые форматы. –
Вы не должны проверять, является ли 'format' или' regex' 'null 'или пустым. Вероятно, они не будут использоваться, поскольку это будет ошибка программирования. Если вы хотите проанализировать дату, вы должны * указать формат. –