Javascript 使用 jquery 验证的 RegEx 密码验证

Javascript RegExp Password Validation with jqueryValidation

我正在使用 Jqueryvalidation plugin and have added the pattern additional method,但我似乎无法使用我的正则表达式。

我的正则表达式如下

/((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).{6,64})/

演示在 jsfiddle

我不太擅长这些。任何人都可以看看可能出了什么问题吗?


更新

抱歉,当我急于去某个地方并确保它们达到最低要求时,我真的需要停止写问题。我知道我没有包含足够的代码,所以我会再试一次。感谢您到目前为止的所有评论。

我正在使用jqueryvalidation plugin to check user input before they can submit a form. I have added one of the "additional methods" from the plugins official GitHub which is is the pattern method。该方法的代码如下

$.validator.addMethod( "pattern", function( value, element, param ) {
    if ( this.optional( element ) ) {
        return true;
    }
    if ( typeof param === "string" ) {
        param = new RegExp( "^(?:" + param + ")$" );
    }
    return param.test( value );
}, "Invalid format." );

然后我的页面中有以下代码

$().ready(function() {
  $("#admin-new-password-form").validate({
    rules: {
      password: {
        required: true,
        minlength: 6,
        maxlength: 64,
        pattern: "/((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).{6,64})/"
      }
    },
    messages: {
      password: {
        required: "Please enter your new password",
        minlength: "Please enter at least 6 characters",
        maxlength: "Please enter no more than 64 characters",
        pattern: "Please enter a valid password"
      }
    }
  });
});

但是,当我输入一个密码时,就我的正则表达式而言,该密码应标记为正确(例如 lu123LU@1 应匹配 1 个数字、1 个小写字母、1 个大写字母和 1 个字符)它是仍然返回错误。这是一个最小的例子。

var value = "lu123LU@1";
var param = "/((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).{6,64})/"

param = new RegExp( "^(?:" + param + ")$" );

alert(param.test( value ));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

请注意,代码来自为正则表达式提供的插件。如果有另一种方法建议我这样做,我会洗耳恭听。我很少使用正则表达式,而且我自己也不完全了解它的工作原理,因此非常感谢对这个菜鸟的任何建议。 :)

感谢@CertainPerformance 的帮助。这就是为我修复它的方法

在我的rules中,我更改了这一行

pattern: "/((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).{6,64})/"

对此

pattern: String.raw`((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).{6,64})`

它现在正在运行。


更新

感谢 original GitHub issue tracker 上的@Arkni 指出我只需要转义我的斜杠就可以通过

pattern: "((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).{6,64})"