0

我正在使用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/来测试正则表达式,它在那里工作正常。

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

附带说明一下,我还希望允许带有重音符号的字符,例如 à、É、ā 或 ô...

4

3 回答 3

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 正则表达式的链接,帮助我弄清楚了 \u 语法。我可能应该更彻底地检查 unicode,但现在应该足够了。

问题解决了。

于 2012-07-18T22:24:46.577 回答
0

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

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

我相信你想要带有基本标记的字母

于 2012-07-18T20:42:31.343 回答
0

将 ^ 放在字符类中将否定字符类中的内容。我会选择 [-.\w\s]

于 2012-07-18T20:57:56.493 回答