本人在做性能测试过程中,发现代码中存在一个校验手机的方法,用的是正则匹配的模式。代码如下:
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就能搞定。
技术类文章精选
- java一行代码打印心形
- Linux性能监控软件netdata中文汉化版
- 接口测试代码覆盖率(jacoco)方案分享
- 性能测试框架
- 如何在Linux命令行界面愉快进行性能测试
- 图解HTTP脑图
- 将swagger文档自动变成测试代码
- 五行代码构建静态博客
- 基于java的直线型接口测试框架初探
非技术文章精选
- 为什么选择软件测试作为职业道路?
- 写给所有人的编程思维
- 自动化测试的问题所在
- 成为优秀自动化测试工程师的7个步骤
- 手动测试存在的重要原因
- 成为自动化测试的7种技能
- 功能测试与非功能测试
- 自动化和手动测试,保持平衡!
- 自动化测试生命周期
大咖风采
