背景
在我们日常开发中,常常会用到一些固定信息,如:手机号、身份证等。也会对账户名,密码等信息作特定的限制。那么就需要过滤掉一些垃圾信息,保证数据的准确性。这里我们通过正则表达式对字符串进行匹配过滤。
正则表达式
正则表达式可以用字符串来描述规则,并用来匹配字符串。比如:”\\d”表示可以匹配一位0~9的数字,其中第一个”"是转义字符。如果想匹配多位字符需要在表达式后面加”{最小位数,最大位数}”({2}表示只能匹配2位数字):”\\d{4,10}”表示可匹配4-10位数字。在String中有一个方法matches就是用来匹配字符串或规则的, 实际运用如下:
1 2 3 4 5 6 7 8
| public class Test { public static void main(String[] args){ System.out.println("0".matches("\\d")); System.out.println("a".matches("\\d")); System.out.println("1234".matches("\\d")); System.out.println("1234".matches("\\d{4,10}")); } }
|
一般来说,匹配规则习惯用[ ]括起来,匹配个数用{ }括起来,’^’匹配输入字符串的开始位置,’$’匹配输入字符串的结束位置,一般来说加上这个2个字符只是一个规范,加与不加效果都一样。常用的表达式如下:
表达式 |
匹配内容 |
表达式 |
匹配内容 |
[. ] |
所有字符 |
[x|y] |
x或y |
[\\d] |
0-9的数字 |
[xyz] |
x或y或z字符集合 |
[0-9] |
0-9的数字 |
[^a-z] |
除a-z之外的字符 |
[a-z] |
a-z的字符 |
* |
匹配前面的子表达式零次或多次 |
[A-Z] |
A-Z的字符 |
+ |
匹配前面的子表达式一次或多次 |
[\\u4E00-\\u9FA5] |
中文字符 |
? |
匹配前面的子表达式零次或一次 |
代码工具类
在开发中我们常常会用到一些信息,我整理了一个过滤工具类。其中固定信息可以借鉴如电话、身份证。其余信息可以根据自己需求修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| public class InfoFilterUtil { public static boolean checkUserName(String username) { String regExp = "^[a-zA-Z0-9]{4,16}3$"; return username.matches(regExp);
}
public static boolean checkPassword(String password) { String regExp = "^[a-zA-Z0-9@/#.+=]{4,16}$"; return password.matches(regExp); }
public static boolean checkName(String name) { String regExp = "^[\\u4E00-\\u9FA5]{2,6}$"; return name.matches(regExp); }
public static boolean checkPhone(String phone) { String regExp = "^[1]([3-9])\\d{9}$"; return phone.matches(regExp); }
public static boolean checkCaptcha(String code) { String regExp = "^[0-9]{6}$"; return code.matches(regExp); }
public static boolean checkIdCard(String s) { String regExp = "^[1-9]\\d{5}(18|19|20|(3\\d))\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$"; return s.matches(regExp); }
public static boolean check0_200Char(String s) { String regExp = "^[\\u4E00-\\u9FA5A-Za-z0-9_]{0,200}$"; return s.matches(regExp); }
public static boolean check1_200Char1(String s) { String regExp = "^[\\u4E00-\\u9FA5A-Za-z0-9_()()]{1,200}$"; return s.matches(regExp); }
public static boolean check400Char(String s) { String regExp = "^([\\s\\S]*){0,400}$"; return s.matches(regExp); }
|
测试
1 2 3 4 5 6 7 8
| public class InfoFilterUtilTest {
public static void main(String[] args){ System.out.println("12345678910是不是手机号:"+InfoFilterUtil.checkPhone("12345678910")); } }
|
运行结果
这是我在Github上开源项目中的其中一个工具类,目前过滤的信息并不多,有需要的可以联系我补充。也欢迎有兴趣的伙伴可以加入这个开源项目中来,贡献自己的力量。下面是项目的地址:
https://github.com/GerryMCzzZ/Java-Utils