Мой первый вопрос, и я взволнован... Я скрывался с тех пор, как я живу и люблю сайт, однако прошу прощения за любые ошибки, форматирование и т.д....
Я пытаюсь проверить формат строкового поля, содержащего дату на Java. Мы получим дату в строке, я буду проверять ее формат, прежде чем разбирать его в реальном объекте Date. Формат передается в формате YYYY-MM-DD. Однако я застрял на одном из моих тестов, если я перейду в "1999-12-33", тест завершится неудачно (как и в случае с днем 33) с этим неполным шаблоном:
((19|20)\\d{2})-([1-9]|0[1-9]|1[0-2])-([12][0-9]|3[01])
Однако, как только я добавляю символы, выделенные жирным шрифтом ниже, он проходит тест (но не должен)
((19|20)\\d{2})-([1-9]|0[1-9]|1[0-2])-(0[1-9]|[1-9]|[12][0-9]|3[01])
* дополнительная заметка, я знаю, что могу изменить 0[1-9]|[1-9]
на 0?[1-9]
, но я хотел разбить все до самого простого формата, чтобы попытаться найти, почему это не работает.
Вот тест лома, который я собрал для запуска всех разных сценариев даты:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class scrapTest {
public scrapTest() {
}
public static void main(String[] args) {
scrapTest a = new scrapTest();
boolean flag = a.verfiyDateFormat("1999-12-33");
}
private boolean verfiyDateFormat(String dateStr){
Pattern datePattern = Pattern.compile("((19|20)\\d{2})-([1-9]|0[1-9]|1[0-2])-(0[1-9]|[1-9]|[12][0-9]|3[01])");
Matcher dateMatcher = datePattern.matcher(dateStr);
if(!dateMatcher.find()){
System.out.println("Invalid date format!!! -> " + dateStr);
return false;
}
System.out.println("Valid date format.");
return true;
}
}
Я программировал в течение ~ 10 лет, но чрезвычайно новичок в Java, поэтому, пожалуйста, не стесняйтесь объяснять что-либо как элементарное, как вы сочтете нужным.