我正在尝试为密码创建一个正则表达式验证:
所以,换句话说,比赛将有:
我想出了:
((.*){3,}[a-z]{1,}[A-Z]{1,}[0-9]{1,})
对我来说这似乎很简单和合乎逻辑,但有两件事情出错:
{3,}
的量词(.*)
以某种方式不起作用并破坏整个正则表达式。起初我最后有{6,}
但是正则表达式会影响内部组中的量词,所以它需要[A-Z]{6,}
而不是[A-Z]{1,}
{3,}
正则表达式时,但只有在这些组有序时才会匹配 - 这样才会匹配aaBB11
,而不是BBaa11
答案 0 :(得分:4)
这是一个用例,我不会使用单个正则表达式,而是使用多个简单表达式。
仍然,要回答您的问题:如果您只想验证密码是否符合这些条件,您可以使用前瞻:
^(?=.{6})(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9])
你基本上是在找一个你看的位置
(?=.{6})
(?=.*?[a-z])
(?=.*?[A-Z])
(?=.*?[0-9])
出现的顺序是任意的,因为可能是部分。
(请注意,我已将 6个字符长解释为至少6个字符。)
答案 1 :(得分:1)
您可以使用此模式^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{6,}
答案 2 :(得分:1)
我相信这就是你想要的:
^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[!-~]{6,}$
如果我们按照您的规范,您的验证密码如下:
^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{6,}$
但是,我们需要对此进行改进,因为除了数字,小写和大写字母外,你真的愿意接受任何角色吗?例如,用户可以使用泰语中的字符吗?空间角色?标签?没想到。 :)
如果您想允许除空格之外的所有可打印ASCII characters而不是点,我们可以使用此字符范围:[!-~]
它是如何运作的?
^
锚点确保我们在字符串(?=.*[a-z])
前瞻确保我们有一个小写字符(?=.*[A-Z])
前瞻确保我们有一个大写字符(?=.*[0-9])
前瞻确保我们有数字(?=.*[a-z])
前瞻确保我们有一个小写字符[!-~]{6,}
匹配六个或更多非空格的ASCII可打印ASCII字符。$
确保我们已到达字符串的末尾(否则,密码可能包含更多不允许的字符)。