不允许 特殊字符和中文
只允许字母、数字、下划线,匹配后得出结果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));
}