【发布时间】:2016-04-18 11:11:58
【问题描述】:
我是正则表达式的新手。
基本上我需要在 Java 中验证密码以满足以下要求:
- 密码必须至少包含六个字符。
- 密码最多可以包含 20 个字符
为了使密码有效,应满足以下 4 条验证规则中的任意 3 条:
- 从 A 到 Z 的英文字母的大写字母;
- 小写字母 a 到 z;
- 十进制数字(0 到 9);
- 非字母数字字符(例如!、$、#、%)
例如:
-
Q145aqa- 可以,因为包含大写、小写和数字 -
145AS$- 可以,因为包含大写、数字和非字母数字字符 -
145234$- 不行,因为只包含数字和非字母数字字符,并且缺少其他验证规则
基本上这是我目前的正则表达式:
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{6,20}$
我不知道如何将非字母数字字符的条件添加到表达式中,以及如何让正则表达式检查是否满足上述 4 个验证规则中的任何三个以使密码有效?
【问题讨论】:
-
为此使用 1 个正则表达式不是一个好主意。使用单独的模式并计算其中有多少是匹配的。
-
前两个可以很容易地用
String#length评估,其他的我会用@WiktorStribiżew 的建议。 (那时单个正则表达式会变得非常简单,只需检查它是否包含大写字母等) -
@WiktorStribiżew 为什么?
-
@WiktorStribiżew 我同意你的看法。我刚刚准备了同样的例子
-
@ButaniVijay:如果你愿意,你可以投票赞成评论,我相信不需要额外的行动:)