【发布时间】:2018-06-21 04:37:29
【问题描述】:
我有一个正则表达式来确保密码包含大小写字符,并且仅限于几个符号:
^(?:(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=.*[$@$!%*?&,;.:-_])[A-Za-z\d$@$!%*?&,;.:-_]+)?$
注意:它允许空密码。我正在检查另一种方式。
但它不允许使用诸如ç、á、õ等拉丁字符。
如何添加这种类型的字符?
更新
我正在尝试创建与 Microsoft 选项同步的密码验证正则表达式,例如:
RequireDigit (Default = true)
Requires a number between 0-9 in the password.
RequireNonAlphanumeric (Default = true)
Requires a non-alphanumeric character in the password.
RequireUppercase (Default = true)
Requires an upper case character in the password.
RequireLowercase (Default = true)
Requires a lower case character in the password.
RequiredUniqueChars (Default = 1)
Requires the number of distinct characters in the password
所以我希望每个规则都有一个带有块的正则表达式,这样我就可以通过添加或删除规则并进行任何组合来更改它。
这有意义吗?
【问题讨论】:
-
不要限制符号。此外,使用字符类
\p{Ll}是任何脚本中的任何小写字母。 Microsoft's documentation 涵盖了这个 -
您为密码设置的规则越多,攻击的针对性就越强。不要过滤任何字符,反正都是加盐和散列对?
-
请不要让我们遵循你奇怪的规则。最小字符长度应该足够了。
-
它允许使用空密码,因为您将整个内容封装在一个捕获组中(为什么?)并在其后加上
?,从而使整个模式成为可选的。即使忽略这一点,内部模式也允许长度在 3 到无限个字符之间的字符串。 3 是相当低的,我相信你也会想要一个上限,对吧? -
如果出于某种奇怪的原因,您必须验证密码,至少允许任何脚本中的任何字符工作,并且不要将字符限制为特定的集合:@ 987654327@