最有效的正则表达式,用于检查字符串是否包含至少3个字母数字字符

fiz*_*x00 7 javascript regex

我有这个正则表达式:

(?:.*[a-zA-Z0-9].*){3}
Run Code Online (Sandbox Code Playgroud)

我用它来查看字符串中是否至少包含3个字母数字字符.它似乎工作.

它应匹配的字符串示例:

'a3c'
'_0_c_8_'
' 9 9d '
Run Code Online (Sandbox Code Playgroud)

但是,我需要它更快地工作.有没有更好的方法来使用正则表达式来匹配相同的模式?


编辑:我最终使用这个正则表达式为我的目的:

(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}
Run Code Online (Sandbox Code Playgroud)

(不需要修饰符)

Wik*_*żew 6

最有效的正则表达式方法是使用对比原理,即并排使用相反的字符类.这是一个正则表达式,可用于检查字符串是否有3个拉丁字母或数字:

^(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}
Run Code Online (Sandbox Code Playgroud)

见演示.

如果你需要一个完整的字符串匹配,你需要追加.*(或者.*$如果你想保证你将匹配所有直到字符串/行的末尾),但在我的regexhero测试中,.*产生更好的性能):

^(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}.*
Run Code Online (Sandbox Code Playgroud)

此外,很大程度上取决于引擎.PCRE有地方在于自动possessification自动优化(即它把**+(?:[^a-zA-Z0-9]*+).

此处查看密码验证优化的更多详细信息.

  • 正则表达式可以锚定,并删除`.*`. (2认同)