Jquery 根据黑名单数组验证输入值
我目前正在使用,我有一个表单,有四个输入字段-单词、国家、年龄和性别 国家、年龄和性别验证没有任何问题,但Word不想验证-我试图让Word值在验证之前对照黑名单检查自己,我试图阻止用户提交攻击性词语 目前,无论我在word输入字段中键入什么单词,它都会显示为错误,并且不希望验证 如果有人知道我错在哪里,我会感谢你的帮助 JS HTMLJquery 根据黑名单数组验证输入值,jquery,validation,jquery-validate,Jquery,Validation,Jquery Validate,我目前正在使用,我有一个表单,有四个输入字段-单词、国家、年龄和性别 国家、年龄和性别验证没有任何问题,但Word不想验证-我试图让Word值在验证之前对照黑名单检查自己,我试图阻止用户提交攻击性词语 目前,无论我在word输入字段中键入什么单词,它都会显示为错误,并且不希望验证 如果有人知道我错在哪里,我会感谢你的帮助 JS HTML 贵国 年龄 18-24 25-34 35+ 性 男性 女性 您添加的word方法中的逻辑是向后的;如果在数组中找不到输入的单词(即,$.inArray返回-
贵国
年龄
18-24
25-34
35+
性
男性
女性
您添加的word
方法中的逻辑是向后的;如果在数组中找不到输入的单词(即,$.inArray
返回-1
),则您希望返回true
,因为该单词有效
在这种情况下,您可以将逻辑简化为:
/* Blacklist Validation */
jQuery.validator.addMethod("word", function(value) {
return $.inArray(value, blacklist) == -1;
});
注意,在这个示例中,我删除了错误消息抑制,因此您可以看到代码正在工作
还需要确保黑名单数组中的值大小写一致,这样您就可以使用value.toUpperCase()
或value.toLowerCase()
将输入的单词强制转换为同一大小写,因为当前FoO
与FoO
不匹配,将被标记为有效。传递函数的说明文件:
实际的方法实现,如果元素有效,则返回true
JQuery的inaray
方法返回-1
是未找到的元素和项目的索引(如果找到)
查看您的方法,如果元素在您的黑名单中找到,它将返回true
——因此这基本上是错误的
另外,正如我所评论的,您正在对输入的
值
执行toUpperCase
(您随后删除了该值)-但是,如果希望黑名单检查不区分大小写,则可能需要将用户输入的值转换为黑名单的大小写-因此,要么将黑名单完全小写,并在值上使用toLowerCase()
,要么将黑名单全部大写,在值上使用toUpperCase()
这个代码应该有效
jQuery.validator.addMethod("word", function(value) {
var in_array = $.inArray(value.toLowerCase(), blacklist);
return in_array == -1;
});
有几个问题:
- 您可以使用
(在原始问题中)与只有小写单词的列表进行比较。我想您打算使用toUpperCase()
李>toLowerCase()
- 返回的
/false
含义相反。当在黑名单中找不到单词时,您需要返回true
(返回值-1)true
- 您根据黑名单检查整个输入,因此一旦输入包含多个单词,验证将永远不会在黑名单中找到它,即使其中一个输入单词可能被黑名单
var blacklist = /\b(foo|bar|fizz|buzz)\b/; /* many more banned words... */
jQuery.validator.addMethod("word", function(value) {
return !blacklist.test(value.toLowerCase());
});
因此,您希望错误添加的作品必须在文本框中输入时进行验证。不是吗?为什么在
值上设置toUpperCase()
?黑名单
中的单词都不是大写的?是的,因此如果用户键入冒犯性单词,该字段将无效,如果用户键入非冒犯性单词,该字段将变为有效并准备提交。@Jamiec输入值为大写,因此,我将数组转换为大写,以便值可以匹配?@Adam-但你没有-你正在将用户输入的值设置为大写,即使黑名单都是小写的。更多细节请参见我的答案。@Rorymcrossan是的,是的,我做了。谢谢你自己@Rory!这对我不起作用。我没有错误。我不明白为什么不起作用。@I但最好是你开始一个新问题,包括与你自己情况相关的代码。我们还需要看看你是如何设置jQuery验证插件的,确保字段名匹配等。可能有很多原因导致某些东西不适合你。具体来说,我验证正确,由于所需的验证有效,因此只有此自定义验证无效。我将验证中的名称放在addMethod函数上。当我从fiddle数组中输入字符串时,不会触发任何验证错误。
jQuery.validator.addMethod("word", function(value) {
var in_array = $.inArray(value.toLowerCase(), blacklist);
return in_array == -1;
});
var blacklist = /\b(foo|bar|fizz|buzz)\b/; /* many more banned words... */
jQuery.validator.addMethod("word", function(value) {
return !blacklist.test(value.toLowerCase());
});