正文

(原创)正则判断时间2008-07-19 23:52:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/billgacsli/36952.html

分享到:

  刚刚学习正则,正则正是很好很强大的东西。   练习下,时间格式为“HH:mm:ss”或“HH:mm”,采用24小时制。 普通方法为,分离出小时、分钟、秒分别进行判断:      public static boolean timeCheck(String time, String owner) {        //检查时间字符串time是否满足格式“HH:mm:ss”或“HH:mm”,若不满足显示相应消息,并返回false        if(time.equals("")){            String msg = owner+" : "+"Time is EMPTY.";            MessageDialog.showError(Controller.getMainFrame(), msg);            return false;        }        int hours, minutes, seconds = 0;        StringTokenizer st = new StringTokenizer(time, ":");        int tokens = st.countTokens();        if (tokens != 3 && tokens != 2) {            String msg = owner+" : "+"Time " + time + " does not conform to the HH:mm:ss format, nor HH:mm format.";            MessageDialog.showError(Controller.getMainFrame(), msg);            return false;        }        String hourToken = st.nextToken();        try {            hours = Integer.parseInt(hourToken);        } catch (NumberFormatException nfe) {            String msg = owner+" : "+hourToken + " in " + time + " can not be parsed as hours.";            MessageDialog.showError(Controller.getMainFrame(), msg);            return false;        }        String minuteToken = st.nextToken();        try {            minutes = Integer.parseInt(minuteToken);        } catch (NumberFormatException nfe) {            String msg = owner+" : "+minuteToken + " in " + time + " can not be parsed as minutes.";            MessageDialog.showError(Controller.getMainFrame(), msg);            return false;        }        if(tokens == 3){            String secondToken = st.nextToken();            try {                seconds = Integer.parseInt(secondToken);            } catch (NumberFormatException nfe) {                String msg = owner+" : "+secondToken + " in " + time + " can not be parsed as seconds.";                MessageDialog.showError(Controller.getMainFrame(), msg);                return false;            }        }        if (hours < 0 || hours > 23) {            String msg = owner+" : "+"Specified hours: " + hours + ". Number of hours must be in the [0..23] range.";            MessageDialog.showError(Controller.getMainFrame(), msg);            return false;        }        if (minutes < 0 || minutes > 59) {            String msg = owner+" : "+"Specified minutes: " + minutes + ". Number of minutes must be in the [0..59] range.";            MessageDialog.showError(Controller.getMainFrame(), msg);            return false;        }        if (seconds < 0 || seconds > 59) {            String msg = owner+" : "+"Specified seconds: " + seconds + ". Number of seconds must be in the [0..59] range.";            MessageDialog.showError(Controller.getMainFrame(), msg);            return false;        }        return true;    } 正则方法为:      public static boolean timeCheck(String time, String owner) {        //检查时间字符串time是否满足格式“HH:mm:ss”,若不满足显示相应消息,并返回false        String regex = "(([01]\\d)|(2[0-3])):[0-5]\\d(:[0-5]\\d)?";        if(!time.matches(regex)){            String msg = owner+" : "+"Time is INVALID.";            MessageDialog.showError(Controller.getMainFrame(), msg);            return false;        }        return true;    }   真是很好很强大啊!!不过上述正则“((2[0-3])|([01]\d)):[0-5]\d(:[0-5]\d)?”实现居然不能匹配“3:3:3”,郁闷!   将正则改为“((2[0-3])|([0-1]?\d)):[0-5]?\d(:[0-5]?\d)?”倒是可以匹配“3:3:3”这种了,但“3:65:34”显然是不对的,却又匹配出两个来,晕!   将正则改为“((2[0-3])|([0-1]?\d)):[0-5]?\d(:[0-5]?\d)”倒是可以匹配“3:3:3”,也能正确判断“3:65:34”,却又没法判断“3:34”这种格式了。唉~~~~

阅读(2943) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册