作为Java开发者,在写程序难免会遇到各种字符串的校验。比如:电话号码,邮箱,日期等等。这些校验一般使用正则表达式来进行验证比较简单方便。而大家网上找一些正则总是不全,所以就把工作中常常使用到的正则表达式总结以下供大家开发的时候使用。
1:日期相关的正则表达式。
1.1:12小时时间制(hh:mm:ss)。
/^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/
public static String regex = "^(?:1[0-2]|0?[1-9]):[0-5]\\d:[0-5]\\d$";
public static void main(String[] args) {
String target = "11:34:55";
Pattern p = Pattern.compile(regex);//java.util.regex.Pattern;
Matcher matcher = p.matcher(target);//java
if (matcher.matches()){
System.out.println("恭喜你验证正确。。。");
}else{
System.out.println("哈哈,验证错误。。。");
}
}
边界标识符:JAVA API 中Pattern类的边界标识符如下:
^ :行的开头。
$ :行的结尾
使用JS进行正则验证的代码如下:
let reg = /^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/ ;
reg.test('12:11:11');
-- 结果如下
true
上面分别演示了使用Java和JS代码进行正则的数据校验,开发中只要把相关的正则表达式进行替换就可以使用了,后面我就只写相关的正则表达式了,不写相关的代码了。
1.2:24小时制时间(HH:mm:ss)。
/^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/
1.3:日期(严谨, 支持闰年判断)。
/^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((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]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$/
2:手机号。
2.1:手机号(mobile phone)中国(严谨), 根据工信部2019年最新公布的手机号段。
/^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/
2.2:手机号(mobile phone)中国(宽松), 只要是13,14,15,16,17,18,19开头即可。
/^(?:(?:\+|00)86)?1[3-9]\d{9}$/
2.3:手机号(mobile phone)中国(最宽松), 只要是1开头即可, 如果你的手机号是用来接收短信, 优先建议选择这一条。
/^(?:(?:\+|00)86)?1\d{10}$/
3:email(邮箱)。
/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
4:身份证号码。
4.1:身份证号(1代,15位数字)。
/^[1-9]\d{7}(?:0\d|10|11|12)(?:0[1-9]|[1-2][\d]|30|31)\d{3}$/
4.2:身份证号(2代,18位数字),最后一位是校验位,可能为数字或字符X。
/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/
4.3:身份证号, 支持1/2代(15位/18位数字)。
/^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)
\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)
([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]
|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0
[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/
5:只包含数字。
/^\d+$/
6:qq号格式正确 。
/^[1-9][0-9]{4,10}$/
7:数字和字母组成 。
/^[A-Za-z0-9]+$/
8:英文字母。
/^[a-zA-Z]+$/
9:邮政编码(中国)。
/^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/
10:车牌号。
10.1:车牌号(新能源) 。
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z](?:((\d{5}[A-HJK])|([A-HJK][A-HJ-NP-Z0-9][0-9]{4}))|[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳])$/
10.2:车牌号(非新能源)。
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]$/
10.3:车牌号(新能源+非新能源)。
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/
11:数字相关。
11.1:正整数,不包含0。
/^\+?[1-9]\d*$/
11.2:负整数,不包含0。
/^-[1-9]\d*$/
11.3:整数。
/^(?:0|(?:-?[1-9]\d*))$/
11.4:浮点数
/^(-?[1-9]\d*\.\d+|-?0\.\d*[1-9]\d*|0\.0+)$/
11.5:浮点数(严格)。
/^(-?[1-9]\d*\.\d+|-?0\.\d*[1-9])$/
12:火车车次。
/^[GCDZTSPKXLY1-9]\d{1,4}$/
13:英文字母 、数字和下划线。
/^\w+$/
15:中文汉字。^[\u4E00-\u9FFF]+$ 【用引用的方式会乱码】
16:车架号(别名:车辆唯一识别码)。
/^[A-Za-z0-9]{17}$/
17:驾驶证(别名:驾驶证档案编码)。
/^[0-9]{12}$/
本文只是总结了一些工作中常用的正则,没有讲每个字符代表的意义,如果你是初级的程序员,你可以直接百度一下:正则表达式,首先就会给你讲解每个字符代表的意义。我不建议大家去深入掌握正则,毕竟里面涉及的场景太多,大家能看懂从各个地方搜出来的正则就行,而本文就是给你总结了开发中常用的正则。如果有问题也欢迎私信我指正。
开发中我们就要站在别人的肩膀上开发就行,也要学会总结开发中遇到的各个问题,要不然你怎么说出你有几年的开发经验了呢?