我有这个正则表达式:

(?:.*[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/

10-11 22:13
查看更多