java - 我可以让这个电话验证器正则表达式更高效吗?
问题描述
几天前我开始弄乱正则表达式,今天我被要求制作一个快速的正则表达式。(创建高效的正则表达式真的是一门艺术吗?)
所以我写了这个简单的正则表达式来匹配一个以色列电话号码:
^05[23489]-?[\d]{3}-?[\d]{4}$
但它会完成在 1 或 2 秒内完成验证大约 10,000 个电话号码的工作吗?我这里没有电脑,所以不能查。感谢您的任何改进!
比赛规则如下:
- 以 05 开头,然后是以下之一:0、2、3、4、8、9
- 然后是可选的连字符
- 然后3位数
- 然后可选'-'
- 最终达到 4 位数。
有效电话号码的几个示例:
- 052-587-6549
- 0531432941
- 058-3219321
- 059-321-1353
解决方案
[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
}
推荐阅读
- python - 如何使用 python 在 paho 中增加每秒消息数
- mysql - 返回匹配一个条件的行,如果没有,则返回 MYSQL 中的另一个
- tensorflow - Tensorflow lite 模型请求的缓冲区大于所需的缓冲区
- javascript - 使用 JavaScript 查找 innerHTML 文本并返回父标记 ID
- c# - 如果 await Task 永远不会返回,异步方法是否同步?
- node.js - 根本不执行简单的 Azure retrieveEntity
- python - 从列表中找到最“共识”的字符串
- javascript - 将 Highcharts 地图与反应组件集成
- python - 如何在 Linux 环境中解码 Silk 文件并将其转换为 PCM/WAV 格式
- jdbc - 使用 impala JDBC 驱动程序连接到 impala 时连接超时已过期