【问题标题】:validating with combination组合验证
【发布时间】:2021-08-14 04:38:10
【问题描述】:

我正在尝试验证 javascript 中的密码。有人可以阐明创建完美的正则表达式或验证它的另一种方式。我尝试了各种方法,但没有奏效

但这不起作用。

【问题讨论】:

    标签: javascript validation passwords


    【解决方案1】:

    您需要使用\[\]\- 使其成为字符类的一部分

    ([\d.\[!@#$%^&()\-_=+{};:,<.>\]]){2}
    

    const strArr = ["1@", "11", "#$", "aa", "aa1#"];
    
    const regex = /([\d.\[!@#$%^&()\-_=+{};:,<.>\]]){2}/g;
    
    const result = strArr.flatMap((s) => {
      const matches = s.match(regex);
      if (matches && matches.length) console.log("NOT SELECTED");
      else console.log("SELECTED");
      return matches;
    });
    console.log(result);

    【讨论】:

    • 你能告诉我如何轻松理解这些东西来创建正则表达式。我真的很难生成正则表达式
    • 这就是为什么我添加了可以告诉你一切的图像......
    【解决方案2】:

    您可以滥用对每个字符的前瞻来确定没有索引后跟两个指定字符。

    const regex = /^(?:(?![\d!@#$%^&()-_=+{};:,<.>]{2}).)+$/;
    
    ["1@", "11", "#$", "aa", "aa1#"].forEach(str => {
      console.log(str, regex.test(str));
    });

    有点浪费,不过在这个版本应该问题不大。 取决于您如何使用该构造;你放在它周围/里面的东西。

    了解ReDoS attacks

    【讨论】:

    • 你能告诉我如何轻松理解这些东西来创建正则表达式。我真的很难生成正则表达式
    • @curiousinlearning 轻松理解什么东西?正则表达式,就像一般的编程一样,是一个经验问题。边做边学。
    • 如果使用大写字母和数字,则使用这种方法,结果证明它不起作用。例如,当我给 A$ 时,它变成了假的。如何修改表达式以确保它适合我。
    • var consecCharacter = /^(?:(?![\d!@#$%^&()-_=+{};:,<.>]{2}).) +$/g; if(myInput.value.match(consecCharacter)) { consecnonalphacharacter.classList.remove("invalid"); consecnonalphacharacter.classList.add("有效"); } else { consecnonalphacharacter.classList.remove("valid"); consecnonalphacharacter.classList.add("invalid");我正在使用上面的代码,但是当我传递一个像“aS1”这样的密码时,它不会在每次进入 else 条件时进入 if 条件 isntad
    • @curiousinlearning 如果找到 2 个连续的非字母字符,则此正则表达式匹配,但 A$ 不包含该字符,因此 false 将是预期结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2011-05-19
    • 2011-02-01
    • 2021-05-20
    • 2011-10-12
    相关资源
    最近更新 更多