一般公司在开发一类对的号码时,会预留一些号码给以后升级的会员使用,比如旺旺靓号,QQ号等,采用正则表达式实现较好,通过规则引擎的后台页面做成实时可配置的也是不错的选择。
一. 一般会有如下的正则需求
代码中每行都标有注释,这个就是需求,为设置靓号应该考虑的方面,这里特别提示下,不能忘记跟公司相关的业务,股票代码等检查。
代码如下:
public class CreditCodeRegexValidateStategyServiceImpl implements CreditCodeValidateStategyService {
private static List<String> levitPatterns;
static synchronized private void init() {
if (levitPatterns == null) {
levitPatterns = new ArrayList<String>();
} else {
return;
}
// 手机号、生日号、跟公司业务相关的号码
levitPatterns.add("^(0|13|15|18|168|400|800)[0-9]*$");
levitPatterns.add("^\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$");
levitPatterns.add("^\\d*(1688|2688|2088|2008|5188|10010|10001|666|888|668|686|688|866|868|886|999)\\d*$");
// 重复号码,镜子号码
levitPatterns.add("^(\\d)(\\d)(\\d)\\1\\2\\3$");
levitPatterns.add("^(\\d)(\\d)(\\d)\\3\\2\\1$");
// AABB
levitPatterns.add("^\\d*(\\d)\\1(\\d)\\2\\d*$");
// AAABBB
levitPatterns.add("^\\d*(\\d)\\1\\1(\\d)\\2\\2\\d*$");
// ABABAB
levitPatterns.add("^(\\d)(\\d)\\1\\2\\1\\2\\1\\2$");
// ABCABC
levitPatterns.add("^(\\d)(\\d)(\\d)\\1\\2\\3$");
// ABBABB
levitPatterns.add("^(\\d)(\\d)\\2\\1\\2\\2$");
// AABAAB
levitPatterns.add("^(\\d)\\1(\\d)\\1\\1\\2$");
// 4-8 位置重复
levitPatterns.add("^\\d*(\\d)\\1{2,}\\d*$");
// 4位以上 位递增或者递减(7890也是递增)
levitPatterns.add("(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){2,}|(?:0(?=9)|9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){2,})\\d");
// 不能以 518 、918 结尾
levitPatterns.add("^[0-9]*(518|918)$");
}
@Override
public boolean isAllow(String input) {
Assert.notNull(input);
return !RegexUtil.contains(input, levitPatterns);
}
static {
init();
}
对于以上正则,前面的大多人都很熟悉了,这里主要讲位置查找和前后向查找,即如下两种号码的判断
// ABBABB
levitPatterns.add("^(\\d)(\\d)\\2\\1\\2\\2$");
// 4位以上 位递增或者递减(7890也是递增)
levitPatterns.add("(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){2,}|(?:0(?=9)|9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){2,})\\d");
位置查找: \\2\\1\\2\\2 这部分代表的 第一个A 位置是1 第二个B位置是2,重复B则用\\2标识
后向查找 ("(?:(?:0(?=1)| 对于连续号码,?=表示往后看,要判断0后面是1吗,1后面是2吗,如此反复可以得到连续号码
二. 使用 org.apache.oro.text.regex.Pattern 代替 java自身带的partern,
为什么抛弃java现有的API不用,而使用perl5规范的正则库呢?他是最全面的正则表达式API,全面兼容perl5,同时也是优化的最好的API之一,在未来的JDK版本中可能会看到的。
上面程序调用的正则代码如下:
public class RegexUtil {
private static PatternCompiler compiler = new Perl5Compiler();
private static PatternMatcher matcher = new Perl5Matcher();
private static Pattern pattern = null;
/**
* 根据正则过滤条件过滤
*
* @param input
* @param levitPatterns
* @return
* @throws MalformedPatternException
*/
public static boolean contains(String input, String patternString) {
try {
pattern = compiler.compile(patternString);
if (matcher.contains(input, pattern)) {
return true;
}
} catch (MalformedPatternException e) {
return false;
}
return false;
}
/**
* 根据批量正则过滤条件过滤
*
* @param input
* @param patternStrings
* @return
* @throws MalformedPatternException
*/
public static boolean contains(String input, List<String> patternStrings) {
for (Iterator<String> lt = patternStrings.listIterator(); lt.hasNext();) {
if (contains(input, (String) lt.next())) {
return true;
}
continue;
}
return false;
}
}
分享到:
相关推荐
靓号正则表达式 已测试 正连 倒连 顺增 顺降 欢迎交流
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...
而本软件正是把强大的正则功能完美地添加到表格中,让 Excel、WPS 支持正则表达式的搜索、匹配提取、替换、定位等,让数据处理能力进化一个层次! 让 Office Excel、WPS 表格支持正则表达式的免费插件:「Excel ...
正则表达式,正则表达式,正则表达式 正则表达式 正则表达式 正则表达式 正则表达式 正则表达式 正则表达式
移动,联通,电信包括虚拟运营商在内的,手机号码归属正则。包括14,16,17,19等号段。短信精灵整理发布。
常用正则表达式 正则表达式 常用正则表达式 正则表达式
《学习正则表达式》从正则表达式的基本概念讲起,到编写完整的sed和Perl脚本,再到转换HTML文件,将这种强大的工具解释得清晰透彻。...《学习正则表达式》适合对正则表达式感兴趣的程序员和互联网从业者。
正则表达式.rar正则表达式.rar正则表达式.rar正则表达式.rar
对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,《正则表达式经典实例》给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。...
正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式...
正则表达式验证工具 V1.0 本软件主要用于检测正则表达式是否正确。 运行环境:本软件为绿色软件,无需安装,但需要Microsoft .NET Framework 4 支持,如果没有请前去下载(下载路径:...
正则表达式正则表达式正则表达式正则表达式 验证程序
正则表达式日期校验 正则表达式日期校验 正则表达式日期校验
Java正则表达式Java正则表达式Java正则表达式Java正则表达式
pb 使用正则表达式源码pbregexp pb中使用正则表达式组件,通过该组件可以在pb脚本中使用功能强大的正则表达式
正则表达式帮助 有用的正则表达式帮助 有用的正则表达式帮助 有用的正则表达式帮助 有用的
JavaScript的RegExp类表示正则表达式,而String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数。 ECMAScript v3对JavaScript正则表达式进行了标准化。JavaScript 1.2实现了ECMAScript v3...
正则表达式 正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式
正则表达式总结正则表达式总结正则表达式总结正则表达式总结正则表达式总结正则表达式总结
正则表达式 详解 基础 正则表达式之道(A Tao of Regular Expressions)