我尝试强制用户输入具有确切数量的caract的密码。 密码必须是这样的: 8个总caracts: 1(完全)大写, 3(完全)数字 和小写(在这种情况下为4)。
我有正则表达式:(?=.*[a-z])(?=.*[A-Z]{1})(?=.*[0-9]{3})
问题是我们可以放3个以上麻木,超过1个超过8个,并且超过8个。
示例:
一个想法或一些帮助? 谢谢(我法国人很抱歉我的英语......)
答案 0 :(得分:0)
你肯定是在正确的轨道上。您正在堆叠前瞻,但前瞻性实际上匹配任何东西。他们只是检查以确保它可以完成匹配。因此,您需要添加类似.+
的内容才能实际匹配。以下是关于如何验证字符串的工作原理。
让我们从整个字符串开始。我们希望它只有8个字符,所以我们可以这样做:
^(?=.{8}$)
然后,我们只需要一个大写字母,所以我们可以这样做:
(?=.*[A-Z])
接下来,我们想要一个数字,所以我们可以使用它:
(?=.*[0-9])
最后,我们希望确切地要求4个小写字母,它们可能相邻也可能不相邻。这是一个与之相符的前瞻:
(?=.*[a-z].*[a-z].*[a-z].*[a-z])
现在我们已经完成了所有部分,我们可以将实际表达式设置为匹配任何字符,不止一次.+
。以前的前瞻将确保它符合要求。将所有内容拼凑在一起,我们最终会得到这样的表达式:
^(?=.{8}$)(?=.*[a-z].*[a-z].*[a-z].*[a-z])(?=.*[A-Z])(?=.*[0-9]).+
答案 1 :(得分:0)
/(?=.*?[A-Z]{1})(?=.*?[a-z]{4})(?=.*?[0-9]{3})/.test("123Aacds");