这是我的表达:
/^(?=.*[a-zA-Z])[A-Za-z0-9\'\s]{2,50}$/m
有人能提供一个可以匹配的例子吗?我认为?=.*[a-zA-Z]
意味着字符串的开头。
答案 0 :(得分:1)
前瞻(作为后视)只是对字符串中某个位置的测试。它不消耗字符,这就是它被称为零宽度断言的原因。
(?=.*[a-zA-Z])
表示&#34;后跟零个或多个字符,但换行符(默认情况下点不匹配换行符)和ascii字母&#34;。< / p>
由于前瞻是在字符串锚 ^
的开始之后,这意味着测试是从字符串中的这个位置执行的(所以字符串的开头) )直到行结束(如果测试成功的行中有一个字母)。
因此,如果该行中没有ascii字母,则整个模式将失败,因为此测试失败。
此特定模式中这一前瞻的目标是确保至少有一个字母,因为^[A-Za-z0-9\'\s]{2,50}$
(所以相同但没有此测试)可能允许使用{{em>这样的字符串1}}或"'''''''''''''"
或" "
没有任何字母。
除此之外,可以用这种方式编写模式以获得更好的性能:
" 123 ''123 1237 "
或
^(?=[A-Za-z0-9\'\s]{2,50}$)[0-9\'\s]*+[A-Za-z0-9\'\s]+
注意:请注意确保单引号前的反斜杠(除非模式位于单引号字符串中)。