一般公司在开发一类对的号码时,会预留一些号码给以后升级的会员使用,比如旺旺靓号,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;
}
}
分享到:
相关推荐
根据提供的标题、描述以及部分代码内容,我们可以总结出与靓号相关的正则表达式的知识点,主要涉及了靓号的不同类型及其对应的正则表达式规则。靓号通常指的是手机号码或其他号码序列中具有一定规律性的数字组合,...
在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...
标题中的“pb 使用正则表达式源码pbregexp”指的是在PowerBuilder(简称pb)环境中,利用名为“pbregexp”的正则表达式组件来实现源代码级别的正则表达式操作。PowerBuilder是一款流行的可视化的、面向对象的软件...
正则表达式是一种强大的文本模式匹配工具,广泛应用于字符串搜索和替换等场景。在Lucene中,可以通过`regexQuery`来利用正则表达式进行复杂条件的匹配,从而实现更精确的搜索需求。 #### regexQuery详解 `regexQuery`...
正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,涉及字符串处理的各个领域。正则表达式转换工具是专门针对这一需求而设计的,它能帮助用户将输入的内容转换...
正则表达式类库则为VC++和MFC的开发者提供了对正则表达式功能的支持。 "VC、VC++,MFC 正则表达式类库"指的是在MFC中实现或集成的正则表达式处理模块。这个库通常包含一系列的类和函数,允许程序员编写符合特定模式...
本项目提供了一个C#编写的正则表达式测试工具,包含完整的源代码,可以帮助开发者调试和测试他们的正则表达式,支持查找和替换功能,并能直观地显示匹配结果。 1. **C#中的正则表达式基础** - `System.Text....
而本软件正是把强大的正则功能完美地添加到表格中,让 Excel、WPS 支持正则表达式的搜索、匹配提取、替换、定位等,让数据处理能力进化一个层次! 让 Office Excel、WPS 表格支持正则表达式的免费插件:「Excel ...
我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》等系列文章。...
1. **语法兼容性**:如描述所述,PCRE库的正则表达式语法与Perl语言高度兼容,这意味着开发者可以利用Perl中广泛使用的正则表达式语法,如贪婪和非贪婪量词、分支选择、反向引用等。 2. **Unicode支持**:PCRE库...
在Qt框架中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员以结构化的方式匹配、查找、替换或验证字符串。本项目针对Qt的lineEdit组件,通过正则表达式实现了输入限制功能,使得lineEdit...
正则表达式的语法比较容易理解,但学习正则表达式的主要困难在于如何灵活运用这些规则来达到查找和替换的目的。 匹配单个字符 在正则表达式中,可以使用句点(.)来匹配任意单个字符。句点在正则表达式中被称为元...
### 正则表达式在数据库查询中的应用 #### 引言 在数据库管理与应用程序开发中,查询数据是一项常见的任务。...然而,在使用正则表达式时也需要考虑到潜在的性能和安全问题,确保其在实际应用中的有效性和可靠性。
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过预定义的模式来识别和操作字符串中的数据。以下是一些常见的正则表达式及其用途: 1. 匹配中文字符:`[u4e00-u9fa5]` - 这个正则...
移动,联通,电信包括虚拟运营商在内的,手机号码归属正则。包括14,16,17,19等号段。短信精灵整理发布。
在Linux系统中,正则表达式(Regular Expression)是一种强大的文本处理工具,它能用于匹配、查找、替换等操作,广泛应用于数据提取、文件搜索、脚本编程等多个领域。本合集主要围绕如何在Linux环境下利用正则表达式...
- `子程序_正则文本查找`:用于在文本中查找符合正则表达式的子串,返回匹配的起始位置和结束位置。 - `子程序_正则文本替换`:可能包含以下参数:源文本、正则表达式模式、替换字符串、替换选项。返回替换后的...
本篇将围绕“使用Java正则表达式分析处理日志”这一主题,探讨如何利用Java的正则表达式功能来提取、过滤和操作日志数据。 首先,我们需要理解正则表达式的基本概念。正则表达式(Regular Expression)是一种模式...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换等操作,广泛应用于编程语言中。在IT行业中,正则表达式是处理字符串时不可或缺的一部分,尤其在数据验证、文本提取等方面。在这个场景中,我们需要创建一...
正则表达式(Regular Expression,简称regex)是编程领域中一种强大的文本处理工具,它用于在字符串中查找、替换或匹配特定模式。在C语言中,实现正则表达式功能通常需要借助第三方库,比如本案例中提到的Henry ...