更高效校驗手機號

本人在做性能測試過程中,發現代碼中存在一個校驗手機的方法,用的是正則匹配的模式。代碼如下:

    public static boolean isTel(String tel) {
        Pattern p = Pattern.compile("^[1][3,4,5,6,7,8,9][0-9]{9}$");
        Matcher m = p.matcher(tel);
        return m.matches();
    }

咋一看沒啥問題,但是仔細看最後用到了matches這個方法,此方法用於完全匹配纔會返回true,因爲正則表達式中已經才用了行首和行尾的標記,其實這個用matches()方法和find()方法差不太多,find其實也可以。這種情況下性能差異忽略。

其實這裏的校驗比較簡單,使用正則並不是最好的方式,因爲正則非常耗時,經過本機測試,正確的手機匹配需要耗時30+ms,雖然很短,但是每次請求都校驗一次的代價全是非常大的,經過一些嘗試,終於找到了一個更高效的檢驗方法。如下:

static boolean isTel(String tel) {
        try {
            def of = Long.valueOf(tel)
            if (of >= 13000000000 && of <= 19000000000)
                return true
        } catch (Exception e) {
            return false
        }
    }

經過測試,該方法需要5-6ms就能搞定。

技術類文章精選

非技術文章精選

大咖風采

長按關注

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章