【发布时间】:2019-08-30 00:51:13
【问题描述】:
我正在使用Jqueryvalidation plugin 并添加了pattern additional method,但我似乎无法让我的正则表达式工作。
我的正则表达式如下
/((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).{6,64})/
jsfiddle 上的演示
我不太擅长这些。谁能看看可能出了什么问题?
更新
抱歉,当我急于去某个地方时,我真的需要停止写问题,并确保它们达到最低要求。我知道我没有包含足够的代码,所以我会再试一次。感谢到目前为止所有的 cmets。
我正在使用jqueryvalidation plugin 来检查用户输入,然后他们才能提交表单。我从插件官方 GitHub 添加了一个“additional methods”,即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 个字符)时,它仍然返回 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>
请注意,代码来自为正则表达式提供的插件。如果有另一种方法建议我这样做,我会全力以赴。我很少使用正则表达式并且不完全理解它自己的工作,所以对这个菜鸟的任何建议将不胜感激。 :)
【问题讨论】:
-
@FrankerZ 很抱歉,我认为这就是我对 jsfiddle 所做的?
-
@certaimperformance 我无法控制那部分。这是插件的一部分。你建议我改用什么?正如我所说的不太擅长正则表达式。
标签: jquery regex jquery-validate