【问题标题】:How do I get the jquery validate plugin to only allow text, spaces, periods, and hyphens?如何让 jquery validate 插件只允许文本、空格、句点和连字符?
【发布时间】:2012-07-18 20:36:14
【问题描述】:

我正在使用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/ 来测试正则表达式,它在那里运行良好。

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

顺便说一句,我还希望允许使用带有重音符号的字符,例如 à、É、ā 或 ô...

【问题讨论】:

    标签: regex jquery-plugins jquery-validate


    【解决方案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,但现在应该足够了。

    问题解决了。

    【讨论】:

    • 除了使用单独的“有效”变量,您还可以使用 return this.optional(element) || !check) 或通过删除插入符号 ^ 从正则表达式中删除否定。
    【解决方案2】:

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

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

    我相信你想要带有基本符号的字母

    【讨论】:

    • 除了 letterwithbasicpunc 包含我不想要的东西。感谢您指出 Additional-methods.js 文件。我已经忘记了,以后会派上用场的。
    【解决方案3】:

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

    【讨论】:

    • 对如何做 à、É、ā 或 ô 的想法?
    • 有趣的是,\w 包含数字字符。所以这不是我想要的。我最终得到了 [^-\.a-zA-Z\s]。还没弄明白 unicode 的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多