在开发过程中,我们有个需求需要对传来的联系方式进行校验。如果是选择的联系方式是邮件,就需要对填写的邮箱地址进行格式校验;如果选择的是电话,需要对手机号进行格式校验。
开发经验不足的我,当时是想着写一个手机号和邮箱的工具类,到时候引入这个工具类就进行判断。但是咨询了一个开发时常两年半的鸡哥,鸡哥说这个简单啊,直接引入正则校验啊,又方便又快捷。
于是我就开始查询资料了,话不多说进行展示:
/**
* 正则表达式进行手机号和格式的校验
*/
String regxPhone = "^[1][3|5|7|8][0-9]{9}$";
String regxEmail = "^[0-9_A-Za-z]+(\\.[0-9_A-Za-z]+)*@[0-9_A-Za-z]+(\\.[0-9A_Za-z]+)+$";
String phone = "12345678956";
String email = "@qq.com";
boolean flag = Pattern.compile(regxPhone).matcher(phone).find(); //false
boolean result = email.matches(regxEmail); //false
//输出结果 flag:false result:false
System.out.println("flag:"+flag+" result:"+result);
手机号校验:"^[1][3|5|7|8][0-9]{9}$";
举例:1开头,第二位是3/5/78/,后面为0-9的9位数字,符合这个匹配条件为true。
邮箱校验:"^[0-9_A-Za-z]+(\\.[0-9_A-Za-z]+)*@[0-9_A-Za-z]+(\\.[0-9A_Za-z]+)+$";
身份证号校验:"/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/"
IP地址校验:"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
下面为对Ip地址校验的解释:
/**
* ^:匹配字符串开头
* ( ):分组,用于同时匹配多个子表达式
* (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?):匹配 0-255 之间的数字。可以有以下三种情况:
* 以 25 开头,后面紧跟 0-5 之间的数字(即 250-255)。
* 以 2 开头,后面紧跟 0-4 之间的数字,再后面紧跟任意一位数字(即 200-249)。
* 以 0 ~ 1 之间的数字开头,后面可能紧跟一位数字或两位数字(即 0-199)
* \.:匹配点号 '.',需要转义符号 '',否则无法匹配成功
* {3}:表示前面的表达式,需要匹配 3 次,这里即表示上述匹配数字和点号的组合需要重复构成 4 组
* $:匹配字符串结尾
*/
String IP_PATTERN = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
String Ip = "192.168.252.4";
boolean result = Ip.matches(IP_PATTERN);
System.out.println("是否符合IP地址规则:"+result);
使用正则表达式来匹配一段文本中的特定种类字符,是比较常用的一种方式,下面是对常用的正则匹配做了一个归纳整理。
详情见常见正则表达式校验 - 简书(有更加详细的内容校验)。