更高效校验手机号

本人在作性能测试过程当中,发现代码中存在一个校验手机的方法,用的是正则匹配的模式。代码以下: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就能搞定。编程

技术类文章精选

非技术文章精选

大咖风采

长按关注

相关文章
相关标签/搜索