jQuery验证方法检查特殊字符

7
我正在尝试编写一个正则表达式语句,以检查特殊字符(如!@#$%^&*()_ +<>?'"{ } [])在我的Javascript表单验证中。
我知道这可能已经被问了1000次,但我时间紧迫。如果您不想回答下面的问题,并且能够指向上述问题的先前答案,我将非常感激。
类似的问题是,为什么当我输入小写的“abc”等时会出现错误?我感到困惑。
jQuery.validator.addMethod("specialChars", function( value, element ) {
        var regex = new RegExp("^[a-zA-Z0-9]+$");
        var key = String.fromCharCode(event.charCode ? event.which : event.charCode);

        if (!regex.test(key)) {
           event.preventDefault();
           return false;
        }
    }, "please use only alphanumeric or alphabetic characters");

pktangyue 我以为key只是一个变量名?它指的是什么?我想我可能是从之前的某个地方复制过来的。 - timmackay
2
你为什么要编写一个已经存在于Validate插件中的方法?在additional-methods.js文件中有一个名为alphanumeric的规则。请参见:http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/additional-methods.js - Sparky
我认为你应该测试用户输入的“value”值。 - pktangyue
1
@sparky比我先回答了...你是怎么把event.which或者event.preventDefault放到表单字段的验证方法里面的? - charlietfl
3个回答

33

不要从头开始编写自定义方法,而是包含additional-methods.js文件并使用alphanumeric规则。

$(document).ready(function () {

    $('#myform').validate({
        rules: {
            field: {
                alphanumeric: true
            }
        }
    });

});

示例代码: http://jsfiddle.net/YsAKx/


如果您不想包含额外的外部文件,只需将默认的alphanumeric方法复制出来即可...

jQuery.validator.addMethod("alphanumeric", function(value, element) {
    return this.optional(element) || /^\w+$/i.test(value);
}, "Letters, numbers, and underscores only please");

10

少量更改

jQuery.validator.addMethod("specialChars", function( value, element ) {
        var regex = new RegExp("^[a-zA-Z0-9]+$");
        var key = value;

        if (!regex.test(key)) {
           return false;
        }
        return true;
    }, "please use only alphanumeric or alphabetic characters");
  1. 如果测试有效,您需要返回值true。
  2. 验证程序不是事件处理程序,因此您不能使用event.preventDefault(),这必须在keypress事件中完成。
  3. 您需要测试传递给验证方法的值。

演示: Fiddle

注意:由于您正在使用+通配符,文本框中至少需要一个字符,您可能需要使用required规则将其拆分为两个规则,并将通配符更改为*


1
@hyperdouche,正如Sparky所建议的那样,该库已经有一个内置规则,建议使用它。 - Arun P Johny
糟糕,好吧,谢谢。在刷新页面之前,我已经写好了我的回复并标记为正确。也许我会回去调查一下。 - timmackay
有用的是,返回 truefalse 让我的一天得救了。 - Bud Damyanov

2
^[a-zA-Z0-9;,.!@#$%:{}[]?"^&*()/\']*|[^&;<>\`]*

您希望在这个[]括号中添加特殊字符: ^[a-zA-Z0-9;,.!@#$%:{}[]?"^&*()/\'] ,如果您不想要,则在此处添加此部分[^&;<>\]`


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接