【问题标题】:Use RegExp to restrict input data使用 RegExp 限制输入数据
【发布时间】:2017-01-05 02:10:27
【问题描述】:

我尝试强制用户输入包含准确字符数的密码。 密码必须是这样的: 共 8 颗 : 1(完全)大写, 3(确切)数字 和小写(在这种情况下为 4 个)。

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

问题是我们可以放置超过 3 个 numb,超过 1 个,超过 8 个 caract..

例子:

  • 5p23qPsb -> 好的
  • I9Opdi90 -> 不行
  • h7y1Rdw6 -> 好的
  • IUD8954r -> 不行

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

【问题讨论】:

  • 我将通过“手动”分析脚本中的密码来替换正则表达式。喜欢:计算大写字母、计算数字等(我没有将这个示例作为答案发布,因为您明确要求在标题中使用正则表达式的解决方案。)
  • [0-9]{3} 表示连续三位而不是总共三位。
  • 这是一个很好的解决方案,谢谢,
  • 不要对这个任务使用正则表达式,只需使用 senden9 的方法。 s.match(/[a-z]/g).length == 4 && s.match(/[A-Z]/g).length == 1 && s.match(/\d/g).length 之类的东西(添加错误检查)。
  • 布莱赫。这似乎是正则表达式适合的那种事情。你有一个字符串,你想确保它匹配某种格式。您不必贬低它们。

标签: javascript regex


【解决方案1】:

您绝对是在正确的轨道上。您正在堆叠前瞻,但前瞻实际上并不 匹配 任何东西。他们只是检查以确保它可以完成比赛。因此,您需要添加类似.+ 的内容才能真正匹配。这是有关如何验证字符串的详细说明。

让我们从整个字符串开始。我们希望它正好是 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

【讨论】:

  • 感谢您提供所有这些信息!我保留你对未来案件的回答:)
【解决方案2】:
 /(?=.*?[A-Z]{1})(?=.*?[a-z]{4})(?=.*?[0-9]{3})/.test("123Aacds");

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多