常用正则表达式收录【待续】

本文详细介绍了使用正则表达式进行日期、身份证、电话号码及编号格式验证的方法,包括日期格式校验、身份证格式校验、联系电话格式校验和编号数字验证。通过具体的代码示例,展示了如何实现这些验证功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式

       /**
	 * 判断日期格式是否正确
	 * @param signTime 日期
	 * @return 若格式正确,则返回true,若不正确则返回false
	 */
	public boolean matcherTime(String signTime) {
		Pattern p = Pattern
				.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3
[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][013457
89]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-
\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s((([0-1][0-9]
)|(2?[0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?{1}$");
		Matcher m = p.matcher(signTime);
		return m.find();
	}
	
	/**
	 * 身份证格式校验
	 * @param IdCard 身份证号码
	 * @return 若格式正确,则返回true,若不正确则返回false
	 */
	public boolean matcherIdCard(String IdCard) {
		Pattern p = Pattern.compile("^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{4}{1}$");
		Matcher m = p.matcher(IdCard);
		return m.find();
	}
	
/**
  * 匹配身份证(Java版)
  * @param passport 身份证号
  * @return 若身份证合法,则返回true否则返回false
  */
  public static boolean testPassport(String passport){
   HashMap<String,String> map=new HashMap<String,String>();
   map.put("11", "北京");
   map.put("12", "天津");
   map.put("13", "河北");
   map.put("14", "山西");
   map.put("15", "内蒙古");
   map.put("21", "辽宁");
   map.put("22", "吉林");
   map.put("23", "黑龙江");
   map.put("31", "上海");
   map.put("32", "江苏");
   map.put("33", "浙江");
   map.put("34", "安徽");
   map.put("35", "福建");
   map.put("36", "江西");
   map.put("37", "山东");
   map.put("41", "河南");
   map.put("42", "湖北");
   map.put("43", "湖南");
   map.put("44", "广东");
   map.put("45", "广西");
   map.put("46", "海南");
   map.put("50", "重庆");
   map.put("51", "四川");
   map.put("52", "贵州");
   map.put("53", "云南");
   map.put("54", "西藏");
   map.put("61", "陕西");
   map.put("62", "甘肃");
   map.put("63", "青海");
   map.put("64", "宁夏");
   map.put("65", "新疆");
   map.put("71", "台湾");
   map.put("81", "香港");
   map.put("82", "澳门");
   map.put("91", "国外");
   String regex="^\\d{17}(\\d|x)$";
   if (!Pattern.matches(regex,passport)) {
    System.out.println("不符合规范");
    return false;
   }
   if (map.get(passport.substring(0, 2)) == null) {
    System.out.println("省份错误");
    return false;
   }
   String sBirthday = passport.substring(6, 10) + "-" + passport.substring(10, 12) + "-"
   + passport.substring(12, 14);
   SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
   try {
    if(df.format(df.parse(sBirthday))==null||!df.format(df.parse(sBirthday)).equals(sBirthday)){
     System.out.println("出生日期错误");
     return false;
    }
   } catch (ParseException e) {
    // TODO Auto-generated catch block
    System.out.println("出生日期错误");
    return false;
   }
   regex="x$";
   Pattern p=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
   Matcher m=p.matcher(passport);
   passport=m.replaceAll("a");
   int iSum=0;
   for ( int i = 17; i >= 0; i--)
    iSum += ((int)Math.pow(2, i) % 11) * Integer.valueOf(String.valueOf(passport.charAt(17 - i)), 11);
   if (iSum % 11 != 1) {
    System.out.println("尾数错误");
    return false;
   }
   return true;
  } 


	/**
	 * 联系电话格式校验
	 * @param phone 联系电话号码
	 * @return 若格式正确,则返回true,若不正确则返回false
	 */
	public boolean matcherPhone(String phone) {
		Pattern p = Pattern.compile("(^(\\d{2,4}[-_-—]?)?\\d{3,8}([-_-—]?\\d{3,8})?([-_-—]?\\d{1,7})?$)|(^0?1[35]\\d{9}$)");
		Matcher m = p.matcher(phone);
		return m.find();
	}
	
	/**
	 * 判断编号是否为数字
	 * @param id 编号
	 * @return 若为数字,则返回true,若不正确则返回false
	 */
	public boolean matcherId(String id) {
		Pattern p = Pattern.compile("^[1-9][0-9]*{1}$");
		Matcher m = p.matcher(id);
		return m.find();
	}
    /**
  * 去除字符串中重复出现的字符
  * @param str 字符串
  * @return 返回没有重复的字符串
  */
 public static String cutWord(String str) {
  String s = str;
  s = str.replaceAll("(?s)(.)(?=.*\\1)", "");
  return s;
 }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值