Life

Wednesday, February 27, 2019

正则表达式-java日期检查

在Java编程中检查日期格式要比上文的邮箱检查简洁些。
以下示例演示如何使用String类的matches()方法检查日期格式是否正确。
package regex.test;

/**
 * description:日期检查2
 * @auther :田江涛
 * @date :2019-02-27 9:03
 */
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CheckDateFormat2 {
    public static void main(String args[]) {
        List dates = new ArrayList();
        dates.add("1990-12-21");
        dates.add("1990-12-31");
        dates.add("1990-12-32");
        dates.add("09-12-12");
        dates.add("2001-02-10");
        dates.add("1989-06-04");
        dates.add("45-09-12");
        dates.add("18/02/02");
        dates.add("2019/04/21");
        String regex = "^([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$";
        Pattern pattern = Pattern.compile(regex);

        for (Object date : dates) {
            Matcher matcher = pattern.matcher((CharSequence) date);
            System.out.println(date + " : " + matcher.matches());
        }
    }
}
示例输出结果:

1990-12-21 : true
1990-12-31 : true
1990-12-32 : false
09-12-12 : false
2001-02-10 : true
1989-06-04 : true
45-09-12 : false
18/02/02 : false
2019/04/21 : false

代码示例使用正则表达式:"^([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$",
根据对照正则表达式语法表,我们可以解释该正则表达式匹配的字符串形式:
^([0-9]{4}) : 开头匹配0-9且为4位数字,对应年份;
- : 以‘-’分割,所以示例中‘/’非法;
(1[0-2]|0[1-9]) : 匹配10,11,12 或者是 01-09,对应月份;
(3[01]|[12][0-9]|0[1-9])$ : 以30、31或10-19、20-29或01-09结尾,对应日期。

当然有一点小问题就是它无法考虑平年2月只有28天的情况,不过在这里并不追究了。

Matcher.maches()方法:

public static boolean matches(String regex,  CharSequence input)
编译给定正则表达式并尝试将给定输入与其匹配,返回的是一个boolean值。  
可以使用快捷方法的形式对代码进行简化:
Pattern.matches(regex, input);
Pattern.compile(regex).matcher(input).matches() ; 

for (Object date : dates) {
//          Matcher matcher = pattern.matcher((CharSequence) date);
            boolean b = Pattern.compile(regex).matcher((CharSequence) date).matches();
            System.out.println(date + " : " + b);
        }

版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者Leslie Tien和本文原始地址:
https://leslietien.blogspot.com/2019/02/java_26.html

No comments:

Post a Comment