需求背景
需求
近期开发了一个需求,校验工资表中的人员手机号是否存在3位以上连号,或者3位以上豹子号,网上的文章有点搞人,正则可以用,但各种案例的方法根本不行。现自己结合需求,写出这篇文章。
先上正则:
//匹配3位以上豹子号
String pattern1 = "([\\d])\\1{2,}";
//匹配3位或以上顺增或顺降
String pattern2 = "(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){2,}|(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){2,})\\d";
上代码:
网上各种校验手机靓号的文章,都是用的matches()方法,但是从demo运行的结果可以看出:使用matches()方法校验,含有符合规则的手机号,返回仍然是false。并不符合要求。
方法说明:
matches():方法是将整个手机字符串去匹配,虽然手机号中包含豹子号或者连号,但因为手机号中其他数字的存在,导致结果返回的是false.
find():方法是尝试查找与匹配区域的下一个子序列。也就是,手机号中包含符合要求的豹子号或者连号,就能返回true
菜鸟文档:
最后,完美实现需求。