我试图使用JQuery Validate来使用正则表达式模式来检测3个字符I,O或Q(不区分大小写)是否在17个字符的字符串字母数字字符串中然后出现错误。当字符串完全包含这些字符时,我能够检测到这些字符,例如qqqqqqqqqqqqqqqqq,但是单个或多次出现例如bbbbbbbbbbbbbbbqq似乎没有被检测到。
我尝试使用的代码如下,我认为正则表达式是合理的直接 -
regex: "[^ioq]/i"
然而,这似乎并不完全有效,我使用的完整javascript是
<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<script type="text/javascript">
$.validator.addMethod(
"regex",
function(value, element, regexp) {
var re = new RegExp(regexp);
return this.optional(element) || re.test(value);
},
"Please check your input."
);
$("#navbar").validate({
onfocusout: true,
onkeyup: false,
rules: {
VIN: {
required: true,
minlength: 17,
maxlength: 17,
regex: "[^ioq]/i"
}
},
messages: {
VIN: {
required: "Please provide a VIN",
regex: "A VIN excludes letters I, O and Q",
minlength: "Enter a 17 character VIN",
maxlength: "Enter a 17 character VIN",
}
},
小提琴示例 - http://jsfiddle.net/f07mz4x0/
答案 0 :(得分:1)
你需要在这里使用负向前瞻来检测单个阻塞字符的存在,如下所示:
/^(?![^ioq]*[ioq])[a-z0-9]{17}$/i
此处(?![^ioq]*[ioq])
是否定前瞻,当输入甚至只出现一次字母[a-z]{17}
(不区分大小写)时,会阻止匹配i, o or q
。