2016-11-08 5 views
-2

У меня есть метод, и он принимает дату как String, и моя цель - узнать месяц Тип как он числовой или String как 01.02 .... или jan, feb, поэтому мне нужно сравнить значение этого месяца с Regex, но, к сожалению, если поле месяца содержит числовое значение, то match.find() не работает, но почему? Спасибо, в AdvanceПочему это регулярное выражение не работает?

public static String detectMonthType(String date) { 
    String[] parts = {}; 

    if(date.contains("/")) { 
     parts = date.split("/"); 
    } else { 
     parts = date.split("-"); 
    } 

    String dateType = ""; 
    String month = parts[1]; 
    String strPattern = "^(0|[1-9][0-9]*)$"; 
    Pattern pattern = Pattern.compile(strPattern); 
    Matcher match = pattern.matcher(month); 

    if(match.find()) { 
     return dateType = "numericMonth"; 
    } else { 
     return dateType = "strMonth"; 
    } 
} 
+0

Что ваш вклад? – shmosel

+0

мой вход подобен 07/11/16 –

+0

Каков ваш ожидаемый результат? – shmosel

ответ

2

Ваше регулярное выражение не будет соответствовать двузначному номеру, если первая цифра равна нулю ... точно так же, как и на вашем входе. Вероятно, вы должны разветвлять регулярное выражение как^(0 [1-9] + | 1 [0-2]) $, которое, в отличие от отображаемого регулярного выражения, будет исключить нулевые и невозможные месяцы, например 13.

+0

Спасибо, что это хорошо. –

0

неправильно. Это должно работать:

String strPattern = "^(0[1-9]|1[0-2])*$"; 

"^(0|[1-9][0-9]*)$" расширяется "^0$" и "^[1-9][0-9]*$", поэтому он будет соответствовать один «0», но не все, начинаются с «0».

+0

Этот шаблон будет соответствовать 13, что является недопустимым месяцем. –

+0

@DavidChoweller Да, вы правы. Я отредактировал свой ответ. – wrkwrk

0

для числовом месяца вы можете использовать следующий regx

^(1[0-2]|0[1-9])$ 

Ниже регулярное выражение шаблона будет проверять одинарную или двойную цифру моли, например, 1 или 01 действует месяц Jan

^(1[0-2]|0?[1-9])$ 

Ниже шаблон для строки месяцев :

(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec) 

И более общий, который проверяет короткое или полное имя мотыля

(Jan(uary)?|(Feb)ruary?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?) 

Это может быть использовано в качестве

Pattern pattern = Pattern.compile(strPattern,Pattern.CASE_INSENSITIVE); 
Смежные вопросы