Javascript RegExp Password Validation with jqueryValidation



我正在使用 Jqueryvalidation 插件并添加了模式附加方法,但我似乎无法让我的正则表达式工作。

我的正则表达式如下

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

在jsfiddle演示

我不太擅长这些。任何人都可以看到可能出错的地方吗?


更新

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

我正在使用jqueryvalidation插件来检查用户输入,然后才能提交表单。我从插件官方 GitHub 中添加了"附加方法"之一,即模式方法。此方法的代码如下

$.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 个字符(,它仍然返回 false。下面是一个最小示例。

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})`

它现在正在工作。


更新

感谢原始 GitHub 问题跟踪器上的@Arkni指出我只需要转义我的斜杠即可通过

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

相关内容

  • 没有找到相关文章

最新更新