否认特殊字符jQuery Validate

我需要使用插件jQuery Validatevalidationtextarea,为此我使用正则表达式并向插件添加一个方法:

$.validator.addMethod( "regex", function(value, element, regexp) { var check = false; var re = new RegExp(regexp); return this.optional(element) || re.test(value); }, "No special Characters allowed here. Use only upper and lowercase letters (A through Z; a through z), numbers and punctuation marks (. , : ; ? ' ' \" - = ~ ! @ # $ % ^ & * ( ) _ + /  { } )" ); 

然后在选项中添加正则表达式:

 comments:{ required: true, maxlength: 8000, regex: /[^A-Za-z\d\-\=\~\!@#\%&\*\(\)_\+\\\/\?\{\}\.\$'\^\+\"\';:,\s]/ } 

这“以某种方式工作”,它确实检测到无效字符并显示消息,问题是它只在特殊字符是框中的唯一字符时才起作用,例如:

 | `` ° ¬ // This shows the error message but... test | // This won't show the message 

因此,如果有一个允许的字符,那么validation就会停止工作。 我错过了什么吗?

PS我很确定这与插件有关,因为我用javascript测试了正则表达式并且效果很好。

而不是测试特殊字符的存在,只测试是否存在有效字符

 regex: /^[A-Za-z\d=#$%...-]+$/ 

...替换为您要允许的所有特殊字符。 在上面的示例中,将允许#$%- 。 注意:您不必转义[] (大多数)字符。

如果你想允许- ,它需要是最后一个字符,否则正则表达式试图解析一个范围。 (例如, [ac]匹配a,b和c。 [ac-]匹配a,b,c和 – )

此外,如果你想允许^ ,它不能是第一个字符,否则正则表达式将其视为一种not运算符。 (例如, [^abc]匹配任何不是a,b或c的字符)


在上面的示例中,完整的正则表达式可能看起来像这样

 regex: /^[A-Za-z\s`~!@#$%^&*()+={}|;:'",.<>\/?\\-]+$/ 

说明

 NODE EXPLANATION -------------------------------------------------------------------------------- ^ the beginning of the string -------------------------------------------------------------------------------- [A-Za- any character of: 'A' to 'Z', 'a' to 'z', z\s`~!@#$%^&*()+={}| whitespace (\n, \r, \t, \f, and " "), '`', ;:'",.<>/?\\-]+ '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '+', '=', '{', '}', '|', ';', ':', ''', '"', ',', '.', '<', '>', '/', '?', '\\', '-' (1 or more times (matching the most amount possible)) -------------------------------------------------------------------------------- $ before an optional \n, and the end of the string 

看看这个!