2013-11-22 61 views
1

我有一个表示日期的字符串,例如"2010.12.25"。如何控制它是否为“yyyy.MM.dd”格式?没有必要检查日期的有效性。groovy/java正则表达式检查是否“yyyy.MM.dd”格式

+0

你是什么意思控制?你究竟需要什么? –

+0

使用简单的日期格式,请参考[this](http://stackoverflow.com/questions/15760248/how-to-create-date-object-from-string-value) –

回答

4

你的正则表达式,在Groovy中,你可以这样做:

boolean match = "2010.12.12" ==~ /\d{4}\.\d{2}\.\d{2}/ 
1

您可以使用这样的SimpleDateFormat来检查日期的格式,因为使用regex来验证日期格式是一种非常糟糕的做法,恕我直言。

String strDate = "2010.12.25"; 
DateFormat df = new SimpleDateFormat("yyyy.MM.dd"); 
try { 
    Date date = df.parse(strDate); 
    // If it comes here, then its a valid format 
} catch (ParseException pe) { 
    // If it comes here, then its not a valid date of this format. 
} 
+0

@NandkumarTekale - 请参阅文档。 “mm”是分钟,“MM”是月份。 – SudoRahul

4

使用SimpleDateFormatparse()字符串,处理异常来决定,如果它是一个有效的日期字符串。不要使用正则表达式来检查日期。例如:

2010.30.40 
2010.13.34 
0

尝试这种与方法isValid(String dateStr)检查这一点,

boolean isValid(String dateStr) { 
    Matcher matcher= 
     Pattern.compile("\\d{4}\\.\\d{2}\\.\\d{2}").matcher(dateStr); 
    return matcher.matches(); 
    } 
+1

'.'匹配任何字符,例如'1234567890'会匹配。 – OGHaza

+0

@OGHaza,我已经更新了答案。 – Masudul

+0

现在'0000.00.00'或'9999.99.99'怎么样? – Imagination

0

试试这个

String a = "2010.12.12"; 

      System.out.println(a.matches("\\d{4}\\.\\d{2}\\.\\d{2}")); 

输出true

+0

这不会'检查日期的有效性.' – Imagination

+1

@想象中的问题:_“没有必要检查日期的有效性”_ –

+0

@tim_yates是的,我错过了'NO'...比它好。 ... – Imagination

2
try { 
    Date.parse('yyyy.MM.dd', '2013.12.21') 
} catch(java.text.ParseException p) { 
    println "Unparseable Date" 
} 
​ 

您还可以使用Groovy日期解析,检查日期格式的准确性。

+0

奇怪的是,它并不总是适用于例如如果您将日期输入为2016.01.99,则仍然会对其进行解析 – rboy

相关问题