我在网上找到了此正则表达式,但是我很难理解它。就是这样:
(?=^.{6,10}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+}{":;'?/>.<,])(?!.*\s).*$
http://regexlib.com/Search.aspx?k=password&c=-1&m=5&ps=100
说明是:
此正则表达式匹配可用于验证强密码。期望至少1个小写字母,1个大写字母,1个数字,1个特殊字符,并且长度应在6到10个字符之间。字符的顺序并不重要。此表达式遵循Microsoft为强密码指定的上述4个规范。
我看到有以下几组。我读过?=
意味着要向前看。
(?=^.{6,10}$)
是否意味着可以预见应该有6到10个字符?(?=.*\d)
是否意味着可以预见应该有0个或多个字符,然后跟一个数字(至少一个数字)?是否可以将其写为(?=\d+)
表示至少应该有1位数字?(?=.*[a-z])
模式以匹配a-z
。同样,这可以写成(?=[a-z]+)
吗?(?=.*[A-Z])
模式以匹配A-Z
。同样,这可以写成(?=[A-Z]+)
吗?(?=.*[!@#$%^&*()_+}{":;'?/>.<,])
也不需要.*
吗?(?!.*\s).*$
-这是什么意思?答案 0 :(得分:0)
您对第一组是正确的。因为它以^
和$
开头和结尾锚定,所以它必须匹配整个输入。因此,必须有6-10个字符。
接下来的四个前行需要在开头.*
,以便在输入中的任何位置匹配所需的字符类型。如果您只写了(?=\d+)
,则必须匹配输入中当前位置的数字,这是开始。通过为每个前缀加上.*
,它允许不同的类型(数字,小写,大写,标点符号)以任意顺序排列。您无需在其后放置+
,因为匹配一个匹配项就足够了。
(?!.*\s)
是阴性前瞻。 \s
与空格匹配,因此这意味着字符串必须不包含任何空格。
最后,.*$
仅匹配整个输入。在所有前瞻之后才需要一些东西。