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})"
我正在使用 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})"