2013-07-18 1 views
-3

Я пытаюсь проверить на String, если она имеет форму dd-mm-yyyy. Любая помощь, пожалуйста?Как проверить, имеет ли строка форму dd-mm-yy

Извините, я просто новичок.

+5

Вы уже узнали о регулярных выражениях? Это хороший способ проверить совпадения в форматировании. –

+5

Существует два решения: один, который проверяет, что формат действителен, а другой проверяет, что не только формат, но и дата. Первое можно сделать с помощью простого регулярного выражения; второе может быть выполнено с помощью форматирования даты. – dasblinkenlight

+0

Пожалуйста, объясните, какой тест вы пытаетесь запустить, разместите минимальные примеры. Помогите нам помочь! –

ответ

2
if(myString.matches("\\d{2}-\\d{2}-\\d{4}")){ 
    //Do something 
} 

В двойном обратных косых используются как один используются для компилятора, чтобы истолковать вторые в буквальном смысле, а в буквальном смысле один, как часть строки используются, чтобы сделать последовательность \d ускользания цифры.

2
String test = "13-04-1999"; 

try { 
    SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-yyyy"); 
    sdf.setLenient(false); 
    sdf.parse(test); 
} catch(ParseException ex) { 
    //string is not valid Date in your format 
} 
+0

-1 Это не вызовет никаких исключений. – Bohemian

+0

забыл о нормализации, thx – bzzzrd

+0

Нормализация? Нет, это не так. Есть способ сделать это броском исключений - см. Другой ответ – Bohemian

6

Вместо того, чтобы просто проверить dd-mm-yyyy, что позволило бы входы как 99-99-9999, вы могли бы просто использовать SimpleDateFormat на самом деле разобрать и проверить, если это действительная дата:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); 
formatter.parse("99-99-9999"); 
formatter.parse("18-07-2013"); 

Если дата недействительна это ll бросьте ParseException, который вы можете затем поймать и обработать ошибку соответствующим образом.

Edit:

Как Bohemian отметил, это на самом деле не сгенерирует исключение на 99-99-9999 входе. Вместо этого он вроде как «перекатывается», чтобы интерпретировать плохую дату как дату регистрации. Я думаю, что они, возможно, сделали это специально, чтобы облегчить арифметику даты. Например, 10-13-2000 становится 10-1-2001 после разбора (нет 13-го месяца, поэтому он станет первым месяцем следующего года). Если вы хотите, чтобы это исключало исключение, вам нужно сказать, чтобы это не было мягким:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); 
formatter.setLenient(false); // <== Added this line 
formatter.parse("99-99-9999"); 
formatter.parse("18-07-2013"); 
+0

-1 Это может вас удивить, но этот код не выдает никаких исключений при его исполнении. Посмотрите, можете ли вы понять, почему. Если да, дайте мне знать, и я отменим нижний план. Это стоит того, чтобы понять это сами, потому что тогда вы не забудете это – Bohemian

+0

@Bohemian - Вау, я действительно должен был проверить это. (К сожалению, у меня нет Scala, установленного на этой машине, и это то, что я обычно использую в качестве своего Java REPL.) Спасибо, что исправил меня. Я отредактировал свой ответ. – DaoWen

+0

Вы не исправили его. У нас есть способ сделать это за исключение для недействительных дат вместо того, чтобы перевернуться. Продолжайте охотиться! – Bohemian

Смежные вопросы