miracle just wanna be better

关于日期的正则表达式

2019-07-04
miracle

java关于日期的正则表达式

现在有一个需求:

  1. 要求会员卡号必须为四位数字,如果满足
  2. 则要求用户输入生日日期,格式:01/24,如果满足
  3. 则要求输入会员卡的积分

首先考虑到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);
	}
}

上一篇 Java多态

下一篇 猴子淘汰问题

Comments

Content