如何让jquery validate插件只允许文本,空格,句点和连字符?

时间:2012-07-18 20:36:14

标签: regex jquery-plugins jquery-validate

我正在使用http://bassistance.de/jquery-plugins/jquery-plugin-validation/来验证我的表单。不幸的是,没有纯文字方法。所以我试着写自己的:

$(document).ready(function(){
$("#staffedit").validate(
    {
        rules: {
        editDisplayName: {
            textonly: true,
            required: true
        }
    }}
    );
jQuery.validator.addMethod(
"textonly", 
function(value, element)
{console.log('textonly called.');
 console.log(/[-.\w\s]/.test(value));
    return this.optional(element) || /[-.\w\s]/.test(value); 
}, 
jQuery.format("Please only enter letters, spaces, periods, or hyphens.")
);
    });

该方法被调用,因为我的console.log函数在适当的时候输出到控制台。我不明白的是,为什么我仍然可以在输入字段中输入$或*。我可以在那里放任何东西,它仍然被评估为有效。

我使用http://regexpal.com/来测试正则表达式,并且在那里工作正常。

那么,如何让插件只允许文本,空格,句点和连字符?

在旁注中,我还想允许带有重音的字符,如à,É,ā或ô......

3 个答案:

答案 0 :(得分:1)

问题在于test()函数的工作原理。如果匹配则返回true。这让我很困惑。我正在使用的正则表达式实际上正在做我认为他们应该做的事情。见http://www.w3schools.com/jsref/jsref_regexp_test.asp

/[^-\.a-zA-Z\s]/.test("David"); //Returns false
/[^-\.a-zA-Z\s]/.test("Davi$ *d"); //Returns true
//without the ^
/[-\.a-zA-Z\s]/.test("Davi$ *d"); //Returns true
/[-\.a-zA-Z\s]/.test("David"); //Returns true

如您所见,这不是很有帮助。所以我所做的就是将测试从退货声明中拉出来。像这样:

$(document).ready(function(){
$("#staffedit").validate(
    {
        rules: {
        editDisplayName: {
            textonly: true,
            required: true
        }
    }}
    );
jQuery.validator.addMethod(
"textonly", 
function(value, element)
{
    valid = false;
    check = /[^-\.a-zA-Z\s\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02AE]/.test(value);
    if(check==false)
        valid = true;
    return this.optional(element) || valid;
}, 
jQuery.format("Please only enter letters, spaces, periods, or hyphens.")
);
});

所以我检查一下我不想要的任何字符是否存在,如果他们没有test()返回false,那么它是有效的。

我也想出了unicode的东西。 [\ u00C0- \ u00D6 \ u00D8- \ u00F6 \ u00F8- \ u02AE]匹配一堆东西,我使用http://en.wikipedia.org/wiki/List_of_Unicode_characters来计算要放入的东西。我想我得到了我想要的一切。感谢Kyle Schmidt发布了Javascript + Unicode regexes链接,帮助我找出了\ u语法。我应该更彻底地检查unicode,但现在应该已经足够了。

问题解决了。

答案 1 :(得分:0)

如果你得到了额外的方法js,那里有一个字母验证器

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/additional-methods.js

你想要letterswithbasicpunc我相信

答案 2 :(得分:0)

将^放在一个字符类中会否定字符类中的内容。我会去[ - 。\ w \ s]