使用RegExp限制输入数据

时间:2017-01-04 15:52:47

标签: javascript regex

我尝试强制用户输入具有确切数量的caract的密码。 密码必须是这样的: 8个总caracts: 1(完全)大写, 3(完全)数字 和小写(在这种情况下为4)。

我有正则表达式:(?=.*[a-z])(?=.*[A-Z]{1})(?=.*[0-9]{3})

问题是我们可以放3个以上麻木,超过1个超过8个,并且超过8个。

示例:

  • 5p23qPsb - >行
  • I9Opdi90 - >不行。
  • h7y1Rdw6 - >行
  • IUD8954r - >不行。

一个想法或一些帮助? 谢谢(我法国人很抱歉我的英语......)

2 个答案:

答案 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]).+

Here is a demo

答案 1 :(得分:0)

 /(?=.*?[A-Z]{1})(?=.*?[a-z]{4})(?=.*?[0-9]{3})/.test("123Aacds");
相关问题