更高效校驗手機號

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

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就能搞定。編程

技術類文章精選

非技術文章精選

大咖風采

長按關注

相關文章
相關標籤/搜索