java关于日期的正则表达式
现在有一个需求:
- 要求会员卡号必须为四位数字,如果满足
- 则要求用户输入生日日期,格式:01/24,如果满足
- 则要求输入会员卡的积分
首先考虑到4位数组不能用整型表示
因为0001最后会变成1,所以我们需要用字符串来表示
先定义一个方法,来判断输入是否是四位数字
public static boolean isNumeric(String str){
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(str).matches();
}
接下来判断日期是否正确
暂时因为不考虑年,先按28天算,以后再补充
一三五七八十腊:31天 | (0[13578]|1[02])/(0[1-9]|[12][0-9]|3[01]) |
四六九冬:30天 | (0[469]|11)/(0[1-9]|[12][0-9]|30) |
二月 | (02/(0[1-9]|[1][0-9]|2[0-8])) |
注意:每个判断都得用小括号括起来
所以表达式是:
String regex = "(((0[13578]|1[02])/(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)/(0[1-9]|[12][0-9]|30))|(02/(0[1-9]|[1][0-9]|2[0-8])))";
完整程序如下:
import java.util.Scanner;
import java.util.regex.Pattern;
public class Practice {
public static boolean isNumeric(String str){
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(str).matches();
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String id;
String birthday;
String score;
int balance;
String regex = "(((0[13578]|1[02])/(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)/(0[1-9]|[12][0-9]|30))|(02/(0[1-9]|[1][0-9]|2[0-8])))";
while(true){
System.out.println("请输入会员号(<4位整数>):");
id = input.next();
if(id.length()==4){
if(isNumeric(id)){
break;
}else{
System.out.println("账号必须是数字构成");
}
}else{
System.out.println("账号必须是四位");
}
}
while(true){
System.out.println("请输入会员生日(月/日<用两位数表示>):");
birthday = input.next();
if(birthday.matches(regex)){
break;
}else{
System.out.println("请输入正确的日期");
}
}
while(true){
System.out.println("请输入积分:");
score = input.next();
if(isNumeric(score)){
balance = Integer.parseInt(score);
break;
}
}
System.out.println("会员账号\t会员信息\t会员积分");
System.out.println(id+"\t"+birthday+"\t"+balance);
}
}