以下示例演示如何使用
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);
}
No comments:
Post a Comment