java常用的正则表达式验证,以及使用正则过滤特殊字符,正则校验身份证;获取字符串中所有匹配的内容

1 篇文章 0 订阅

不允许 特殊字符和中文

只允许字母、数字、下划线,匹配后得出结果true/false

import java.util.regex.Matcher;
import java.util.regex.Pattern;

Pattern pattern=Pattern.compile("^[a-zA-Z0-9_]+$");
//testStr被检测的文本
Matcher matcher = pattern.matcher(testStr);
//匹配上的时候返回true,匹配不通过返回false
matcher.matches();

验证手机号:^((17[0-9])|(14[0-9])|(13[0-9])|(15[0-9])|(16[0-9])|(18[0-9])|(19[0-9]))\d{8}$
汉字:^[\u4e00-\u9fa5]{0,}$
Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
空白\回车制\表符: \s
去除字符串中的空白\回车制\表符
在这里插入图片描述
在这里插入图片描述

java使用正则过滤特殊字符

import java.util.regex.Matcher
import java.util.regex.Pattern

// 过滤特殊字符
// 只允许字母和数字
String  regEx  =  "[^a-zA-Z0-9]";
// 清除掉所有特殊字符
String str = """[`~!#\$%^&*()+=|{}'Aa:;',\\\\[\\\\].<>/?~!@#¥%……&*()9——+|{}【】\\"‘;:”“’。,、?]"""
Pattern  p = Pattern.compile(regEx)
Matcher m = p.matcher(str)
println(m.replaceAll("").trim())

在这里插入图片描述

java自带注解验证手机号@Pattern+@Valid

controller处需要加上@Valid注解不然不会抛异常的

import javax.validation.constraints.Pattern;

@Pattern(regexp = "^((17[0-9])|(14[0-9])|(13[0-9])|(15[0-9])|(16[0-9])|(18[0-9])|(19[0-9]))\\d{8}$", message = "id不正确")
private String keyWord;

在这里插入图片描述

正则校验身份证

18位身份证的简单校验

Pattern pattern1 = Pattern.compile("^(\\d{6})(19|20)(\\d{2})(1[0-2]|0[1-9])(0[1-9]|[1-2][0-9]|3[0-1])(\\d{3})(\\d|X|x)?$"); //粗略的校验  
Matcher matcher = pattern1.matcher(idCard);  

加权校验身份证的真实性

/** 
 * 18位身份证校验,比较严格校验 
 * @author lyl 
 * @param idCard 
 * @return 
 */  
public static boolean is18ByteIdCardComplex(String idCard){  
    Pattern pattern1 = Pattern.compile("^(\\d{6})(19|20)(\\d{2})(1[0-2]|0[1-9])(0[1-9]|[1-2][0-9]|3[0-1])(\\d{3})(\\d|X|x)?$");   
    Matcher matcher = pattern1.matcher(idCard);  
    int[] prefix = new int[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};  
    int[] suffix = new int[]{ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 };  
    if(matcher.matches()){  
        Map<String, String> cityMap = initCityMap();  
        if(cityMap.get(idCard.substring(0,2)) == null ){  
            return false;  
        }  
        int idCardWiSum=0; //用来保存前17位各自乖以加权因子后的总和  
        for(int i=0;i<17;i++){  
            idCardWiSum+=Integer.valueOf(idCard.substring(i,i+1))*prefix[i];  
        }  
          
        int idCardMod=idCardWiSum%11;//计算出校验码所在数组的位置  
        String idCardLast=idCard.substring(17);//得到最后一位身份证号码  
          
        //如果等于2,则说明校验码是10,身份证号码最后一位应该是X  
        if(idCardMod==2){  
            if(idCardLast.equalsIgnoreCase("x")){  
                return true;  
            }else{  
                return false;  
            }  
        }else{  
            //用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码  
            if(idCardLast.equals(suffix[idCardMod]+"")){  
                return true;  
            }else{  
                return false;  
            }  
       }  
    }  
    return false;  
}  

正则校验年级

以数字[2-7]或者中文数字[二三四五六七]开头,以年级结尾

^(([2-7]|[二三四五六七]).?)+年级$

在这里插入图片描述

获取字符串中所有匹配的内容

String str = "select * from order where createdUser = ${currentUser} and  depart = ${currentOrg} and status = 'VALID'";
String reg = "\\$\\{[a-zA-Z0-9]+\\}";//定义正则表达式

Pattern patten = Pattern.compile(reg);//编译正则表达式
Matcher matcher = patten.matcher(str);// 指定要匹配的字符串

List<String> matchStrs = new ArrayList<>();

while (matcher.find()) { //此处find()每次被调用后,会偏移到下一个匹配
   matchStrs.add(matcher.group());//获取当前匹配的值
}

for (int i = 0; i < matchStrs.size(); i++) {
    System.out.println(matchStrs.get(i));
}

参考了大佬的博文
https://www.iteye.com/blog/ontheway-lyl-2268132

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值