首页 > 解决方案 > 我可以让这个电话验证器正则表达式更高效吗?

问题描述

几天前我开始弄乱正则表达式,今天我被要求制作一个快速的正则表达式。(创建高效的正则表达式真的是一门艺术吗?)

所以我写了这个简单的正则表达式来匹配一个以色列电话号码: ^05[23489]-?[\d]{3}-?[\d]{4}$ 但它会完成在 1 或 2 秒内完成验证大约 10,000 个电话号码的工作吗?我这里没有电脑,所以不能查。感谢您的任何改进!

比赛规则如下:

有效电话号码的几个示例:

  1. 052-587-6549
  2. 0531432941
  3. 058-3219321
  4. 059-321-1353

标签: javaregex

解决方案


[23489]0包括. \d此外,用字符类括号[\d]=包裹 single 不是一个好主意\d

利用

^05[023489]-?\d{3}-?\d{4}$
    ^

请参阅正则表达式演示

在 Java 中,如果使用带有方法的模式,则不需要^和锚点, 因为它需要完整的字符串匹配。$.matches()

if (phone.matches("05[023489]-?\\d{3}-?\\d{4}")) {
    // This is valid
}

推荐阅读