靓号正则表达式(前后向查找等) 和 apache正则包使用
生活随笔
收集整理的這篇文章主要介紹了
靓号正则表达式(前后向查找等) 和 apache正则包使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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("^(<a>\\d)(\\d)(\\d)\\1\\2\\3$");?? </a>????????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();?? ????}?? 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("^(<a>\\d)(\\d)(\\d)\\1\\2\\3$");
</a> levitPatterns.add("^(\\d)(\\d)(\\d)\\3\\2\\1$");// AABBlevitPatterns.add("^\\d*(\\d)\\1(\\d)\\2\\d*$");// AAABBBlevitPatterns.add("^\\d*(\\d)\\1\\1(\\d)\\2\\2\\d*$");// ABABABlevitPatterns.add("^(\\d)(\\d)\\1\\2\\1\\2\\1\\2$");// ABCABClevitPatterns.add("^(\\d)(\\d)(\\d)\\1\\2\\3$");// ABBABBlevitPatterns.add("^(\\d)(\\d)\\2\\1\\2\\2$");// AABAABlevitPatterns.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)$");}@Overridepublic boolean isAllow(String input) {Assert.notNull(input);return !RegexUtil.contains(input, levitPatterns);}static {init();} //?ABBABB?? ??????levitPatterns.add("^(\\d)(\\d)\\2\\1\\2\\2$");?? // ABBABBlevitPatterns.add("^(\\d)(\\d)\\2\\1\\2\\2$"); Java代碼 ? //?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");?? ???????? // 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"); 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;?? ????}?? }??
- 開源應用
一般公司在開發一類對的號碼時,會預留一些號碼給以后升級的會員使用,比如旺旺靚號,QQ號等,采用正則表達式實現較好,通過規則引擎的后臺頁面做成實時可配置的也是不錯的選擇。
一. 一般會有如下的正則需求
??? 代碼中每行都標有注釋,這個就是需求,為設置靚號應該考慮的方面,這里特別提示下,不能忘記跟公司相關的業務,股票代碼等檢查。
?
?
代碼如下:
Java代碼 ?對于以上正則,前面的大多人都很熟悉了,這里主要講位置查找和前后向查找,即如下兩種號碼的判斷
??
Java代碼 ?位置查找:?\\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版本中可能會看到的。
?
?
上面程序調用的正則代碼如下:
Java代碼 ?總結
以上是生活随笔為你收集整理的靓号正则表达式(前后向查找等) 和 apache正则包使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 智慧公安警务系统开发,智慧公安行业解决方
- 下一篇: 【IT】福昕pdf保持工具选择