我有以下正则表达式:
(?=.{8,})[a-zA-Z]+[^a-zA-Z]+|[^a-zA-Z]+[a-zA-Z]+
Run Code Online (Sandbox Code Playgroud)
我不明白它的"?="部分.
我的基本(不正确)理解是它说一个长度为8个字符或更长的字符串,其中有一个或多个字母后跟一个或多个非字母,或者一个或多个非字母后跟一个或多个字母.我的理解显然不正确.
引擎是.NET.
任何帮助,将不胜感激.
它看起来像一个简单的密码最小强度验证器.它匹配至少8个字符长且包含至少一个字母和一个非字母(以任何顺序)的任何内容.
(?= ..)是一个必须匹配的前瞻,但不消耗任何字符.如果少于8个字符,则前瞻失败,因此整个匹配失败.如果前瞻成功,则正则表达式的其余部分仍然必须匹配,但它从头开始检查,因为尚未消耗任何字符.
如果你在没有前瞻的情况下编写它,该术语.{8,}将消耗字符串中的所有字符,因此表达式的其余部分不会留下任何内容,因此它总是会失败.
编写此表达式的另一种方法是:
^(?=.{8})(?=.*?[a-zA-Z])(?=.*?[^a-zA-Z])
Run Code Online (Sandbox Code Playgroud)
这仅使用前瞻,但含义大致相同.
我还在^开头添加了一个锚点,以避免在匹配失败时进行不必要的额外搜索.
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |