前言
有一些业务需求需要做入参校验,例如注册账号,密码的业务规则密码位数为6-16个字符,区分大小写,支持字母(a-z,A-Z)、数字(0-9)及“_~@#$^”符号
代码如下(示例):
^[A-Za-z0-9_~@#$^]{6,16}+$
一、正则表达式是什么?
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
二、正则表达式的使用
1.正则表达式原理
使用之前咱们先理解正则表达式一些标点符号的含义,这里吐槽一下很多博客写的正则表达式说是理解并使用,结果进去只看到教我们怎么处理一些业务校验,讲了一大堆不知道都不知道这个表达式是怎么写的那个又是怎么写的。菜鸟教程写的比较详细,大家可以去看看。
咱们只需要知道最基础的几个
字符 | 含义 |
---|---|
^ | 匹配开始符号 |
$ | 匹配结束符号 |
* | 零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}。 |
+ | 一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。 |
? | 零次或一次匹配前面的字符或子表达式。例如,"do(es)?“匹配"do"或"does"中的"do”。? 等效于 {0,1}。 |
{n} | n 是非负整数。正好匹配 n 次。例如,"o{2}"与"Bob"中的"o"不匹配,但与"food"中的两个"o"匹配。 |
{n,} | n 是非负整数。至少匹配 n 次。例如,"o{2,}“不匹配"Bob"中的"o”,而匹配"foooood"中的所有 o。"o{1,}“等效于"o+”。"o{0,}“等效于"o*”。 |
{n,m} | m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,"o{1,3}"匹配"fooooood"中的头三个 o。‘o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。 |
\ | 转义符号,像JAVA有些符号不能直接写,需要用\进行转义 |
. | 它匹配任何一个字符如:“a” 或 “1”。 |
/d,/w等 | 这些元字符就不说明了,都是匹配数字、字符串这些规则,像/d是数字字符匹配。等效于 [0-9]。 |
下图是只允许用户名包含字符、数字、下划线和连接字符 -,并设置用户名的长度
验证实数且只有两位小数的表达式
2.利用@Pattern(不建议)
可以利用valid库的@Pattern注解去实现入参的正则校验,但是这个注解只对某些基本类型有效,大部分不生效,原因不明
使用方法,还是前言的密码校验,代码如下(示例):
//regex是正则表达式,message是报错信息
@Pattern(regex = "^[A-Za-z0-9_~@#$^]{6,16}+$",message = "密码位数为6-16个字符,区分大小写,支持字母(a-z,A-Z)、数字(0-9)及“_~@#$^”符号")
private String password
3.利用Pattern类的方法或String的matches方法
String的matches方法
代码如下(示例):
String password = "test";
String regex = "^[A-Za-z0-9_~@#$^]{6,16}+$";
if (!(password.matches(regex))){
throw new Exception("密码位数为6-16个字符,区分大小写,支持字母(a-z,A-Z)、数字(0-9)及“_~@#$^”符号");
}
Pattern类
代码如下(示例):
CharSequence password = "test";
String regex = "^[A-Za-z0-9_~@#$^]{6,16}+$";
Pattern.matches(regex, password);
总结
JAVA的转义可以利用idea工具,先在别的地方写好正则表达式,再复制粘贴到idea,哪个地方需要转义,idea会帮你处理。上面的内容看完就可以自己写几个正则表达式,以后遇到别的业务就可以灵活处理,因为业务各种各样的不可能网上能够完美解决自身需求,如果不知道该如何下手,我这边写几个需求,大家可以去写。
1、正确的联系方式格式(这个比较抽象,可以网上查)
2、价格必须大于等于零,且只允许两位小数(提示:先处理整数,再用符号.处理小数)
3、只能输入字母或者数字,最小不低于1个字符(提示:利用/w元符号,/w匹配字母或数字或下划线或汉字)