我目前正在使用jQuery Validation,我有一个包含四个输入字段的表单 - Word,Country,Age&性。
国家,年龄和性别验证没有任何问题,但Word不想验证 - 我试图在验证之前尝试使用Word值来检查黑名单,我试图阻止用户提交攻击性词语
目前,无论我在Word输入字段中输入什么字,它总是显示为错误,并且不想验证。
如果有人能看到我出错的地方,我会很感激帮助!
JS
func
HTML
/* Blacklist Array */
var blacklist = ['foo', 'bar', 'fizz', 'buzz', /* many more banned words... */ ];
/* Blacklist Validation */
jQuery.validator.addMethod("word", function(value) {
var in_array = $.inArray(value, blacklist);
if (in_array == -1) {
return false;
} else {
return true;
}
});
/* Submit Validation */
$("#submit").validate({
errorPlacement: function(error, element){},
rules: {
word: {
required: true
},
country: {
required: true
},
age: {
required: true
},
sex: {
required: true
}
},
submitHandler: function(form) {
alert('Submitted');
}
});
答案 0 :(得分:1)
您添加的word
方法中的逻辑是向后的;如果在数组中找不到输入的单词(即。$.inArray
返回-1
),那么您希望返回true
,因为此单词有效。
在这种情况下,您可以将逻辑简化为:
/* Blacklist Validation */
jQuery.validator.addMethod("word", function(value) {
return $.inArray(value, blacklist) == -1;
});
请注意,在示例中,我已删除了错误消息抑制,因此您可以看到代码正常工作。
同样值得确保案例与黑名单数组中的值保持一致,因此您可以使用value.toUpperCase()
或value.toLowerCase()
将输入的字词转换为相同的案例,如同{ {1}}不匹配FoO
,并且会被标记为有效。
答案 1 :(得分:1)
有几个问题:
toUpperCase()
(在原始问题中)与仅包含小写字词的列表进行比较。我想您打算使用toLowerCase()
; false
/ true
。当在黑名单中找不到该单词时,您将要返回true
(返回值-1)我建议将黑名单变成正则表达式。这将使您的代码非常简洁:
var blacklist = /\b(foo|bar|fizz|buzz)\b/; /* many more banned words... */
jQuery.validator.addMethod("word", function(value) {
return !blacklist.test(value.toLowerCase());
});
答案 2 :(得分:0)
addMethod
的文档说明了传入的函数:
实际的方法实现,如果元素有效则返回true。
JQuery的inArray
方法返回-1
是找到 NOT 的元素,如果是,则为该项的索引。
如果在您的黑名单中找到元素 IS ,则查看您的方法会返回true
- 所以它基本上是错误的方式。
另外,正如我评论的那样,您在输入的toUpperCase
上进行了value
(之后您已删除) - 但是如果您希望黑名单检查不区分大小写,则可能需要将用户输入的值转换为黑名单所具有的任何外壳 - 所以要么将黑名单全部小写并对值使用toLowerCase()
,要么将黑名单全部置于大写并且值为toUpperCase()
。< / p>
此代码应该可以使用
jQuery.validator.addMethod("word", function(value) {
var in_array = $.inArray(value.toLowerCase(), blacklist);
return in_array == -1;
});