我有这个正则表达式:
(?:.*[a-zA-Z0-9].*){3}
我用它来查看字符串中是否至少包含 3 个字母数字字符。它似乎工作。
它应该匹配的字符串示例:
'a3c'
'_0_c_8_'
' 9 9d '
但是,我需要它更快地工作。有没有更好的方法来使用正则表达式来匹配相同的模式?
编辑:
我最终将这个 regex 用于我的目的:
(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}
(无需修饰符)
最佳答案
最有效的正则表达式方法是使用 principle of contrast ,即并排使用相反的字符类。这是一个正则表达式,可用于检查字符串是否包含 3 个拉丁字母或数字:
^(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}
See demo 。
如果你需要一个完整的字符串匹配,你需要附加
.*
(或者 .*$
如果你想保证你将匹配到字符串/行的末尾),但在我对 regexhero 的测试中,.*
产生更好的性能):^(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}.*
此外,很大程度上取决于发动机。 PCRE 具有自动优化,包括自动拥有(即它在
*
中将 *+
转换为 (?:[^a-zA-Z0-9]*+
)。请参阅此处的 more details on password validation optimizations。
关于javascript - 检查字符串是否包含至少 3 个字母数字字符的最有效正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30723346/