检查模式以及java中的长度

时间:2011-10-24 09:37:19

标签: java regex

我想检查日期的模式为给定(yyyy-mm-dd hh:mm:ss)。 在下面的代码中,我想检查除yyyy-mm-dd hh:mm:ss以外的任何内容,如果其他内容多于或少,则应该为false。是否有更好的方法来检查模式,以便我不必单独检查日期的长度?

public class CheckNumber {

   public static void main(String ...args){
       CheckNumber cn1=new CheckNumber();
       Boolean b=cn1.test("2011-10-12 08:29:56");
       System.out.println(b);
   }




   public static boolean test (String s){
       Pattern pattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}");
       Matcher matcher = pattern.matcher(s);
       if (matcher.find()){
           return true; 
       } 
       return false; 
   }

}

4 个答案:

答案 0 :(得分:2)

使用matcher.matches()代替matcher.find()。这就是它的用途:检查字符串是否与模式完全匹配。您可以通过阅读the javadoc轻松找到这一点。

如果您需要检查它是否是有效日期,请使用SimpleDateFormat。要测试日期格式解析器是否已完全解析了您的字符串,请使用以ParsePosition作为参数的parse方法,并检查解析后的位置是否为String的长度。

答案 1 :(得分:2)

这取决于你的意思是“更好”。我会使用SimpleDatePattern并尝试解析日期:这将检查格式和值范围(即1月32日将被排除,以及2月30日)。

E.g。

    try {
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        format.setLenient(false); // disable heuristics for improper dates
        format.parse(s);
        return true;
    } catch (ParseException e) {
        return false;
    }

答案 2 :(得分:1)

您可以使用new SimpleDateFormat(yourFormat).parse(date)。如果它返回值,则格式为OK,如果抛出ParseException,则格式错误。

我希望这能回答你的问题。

答案 3 :(得分:0)

如果您不想使用上面建议的SimpleDateFormat解决方案并使用正则表达式。我建议如下:^([0-9]{4})-([0-1][0-9])-([0-3][0-9])\s([0-1][0-9]|[2][0-3]):([0-5][0-9]):([0-5][0-9])$

它很难看,但它会过滤比您当前使用的日期更多的无效日期。它也不匹配字符串:“fooo 2011-10-12 08:29:56 bar”(你的代码实际上会在这样的“日期”中返回true)。