否认特殊字符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