日期有很多格式,这里只以“年-月-日”这种格式作为示例
1、年就是0-9的数字重复4次,月份会有两种情况:0-9和10-12。
0-9范围就用0[1-9]来表示,10-12就用1[0-2]来表示
^[0-9]{4}-(0[1-9]|1[0-2])
2、天数也需要分为三个情况,0-9,10-29和30-31
^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
以下范例判断是否为有效日期。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Sample {
public static void main(String[] args) {
System.out.println("2023-11-15 是否有效?"+check("2023-11-15"));
System.out.println("2023-18-21 是否有效?"+check("2023-18-21"));
System.out.println("2028-01-03 是否有效?"+check("2028-01-03"));
}
//判断是否为有效日期
public static boolean check(String str) {
String patt="^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$";
Pattern r = Pattern.compile(patt);
Matcher matcher = r.matcher(str);
return matcher.find();
}
}
运行以上范例,得到如下打印结果。
2023-11-15 是否有效?true
2023-18-21 是否有效?false
2028-01-03 是否有效?true
3、如果月份和日期只有单个数字,也认定为是有效的,那么要使用下面的正则表达式:
^[0-9]{4}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12][0-9]|3[01])$
范例如下。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Sample {
public static void main(String[] args) {
System.out.println("2023-11-15 是否有效?"+check("2023-11-15"));
System.out.println("2023-18-21 是否有效?"+check("2023-18-21"));
System.out.println("2028-01-03 是否有效?"+check("2028-01-03"));
System.out.println("2028-1-3 是否有效?" +check("2028-1-3"));
System.out.println("2028-1-03 是否有效?" +check("2028-1-03"));
System.out.println("2028-01-3 是否有效?" +check("2028-01-3"));
System.out.println("2028-13-03 是否有效?" +check("2028-13-03"));
}
//判断是否为有效日期
public static boolean check(String str) {
String patt="^[0-9]{4}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12][0-9]|3[01])$";
Pattern r = Pattern.compile(patt);
Matcher matcher = r.matcher(str);
return matcher.find();
}
}
运行以上范例,得到如下打印结果。
2023-11-15 是否有效?true
2023-18-21 是否有效?false
2028-01-03 是否有效?true
2028-1-3 是否有效?true
2028-1-03 是否有效?true
2028-01-3 是否有效?true
2028-13-03 是否有效?false