在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 求助幫看個正則Bug,求解

求助幫看個正則Bug,求解

問題描述

寫了個正則匹配,對手機號碼過濾靚號級別AAAA的號碼.可以匹配出來,但是也碰到了BUG。

  • 正則:^(?=d*(d)(d)(d)1$)1[35789]\d{9}$
  • 驗證號碼

    • 17091217777 --> true
    • 17097777297 --> true
    • 17091217297 --> true
    • 17091217298 --> false

實在沒想明白17091217297這個號碼為何為true

代碼


    @Test
    public void AAAA(){
        String phoneNo = "17091217297";
        String pattern = "^(?=\\d*(\\d)(\\d)(\\d)\\1$)1[35789]\\d{9}$";
        matchRule(phoneNo, pattern);
    }

   private void matchRule(String phoneNo, String pattern) {
        Pattern pa = Pattern.compile(pattern);
        Matcher ma = pa.matcher(phoneNo);
        Assert.assertTrue(ma.matches());
    }

期望

期望17091217297正則能過濾掉,請高手指點!

回答
編輯回答
老梗

你這個的問題不僅僅是匹配17091217297錯誤,其實還有很多錯誤的比如17097077297也會錯誤,其實應該寫成這樣就好了
String pattern = "^(?=\\d*(\\d)\\1\\1\\1\\d*$)1[35789]\\d{9}$";

其實還有一個笨辦法,就是把所有重復4個的都標識出來,比如:
String pattern = "^(?=\\d*(0000|1111|2222|3333|4444|5555|6666|7777|8888|9999)\\d*)1[35789]\\d{9}$";

2018年9月23日 17:41
編輯回答
紓惘
^1[35789]\\\\d{5}(\\\\d)\\\\1{3}$
2017年6月27日 04:49