【问题标题】:Regular expression field validation in jQueryjQuery中的正则表达式字段验证
【发布时间】:2008-12-05 21:24:09
【问题描述】:

在 jQuery 中,有没有可以用来匹配字符串中给定正则表达式的函数/插件?

例如,在一个电子邮件输入框中,我得到一个电子邮件地址,想看看它的格式是否正确。我应该使用什么 jQuery 函数来查看我的验证正则表达式是否与输入匹配?

我已经用谷歌搜索了一个解决方案,但我找不到任何东西。

【问题讨论】:

  • 这个问题的标题有点误导。也许应该更好地表明这与表单输入值匹配有关。我给 nickf 的回答 +1,因为这就是我想要的。

标签: jquery regex


【解决方案1】:

如果您想根据正则表达式搜索某些元素,可以使用filter 函数。例如,假设您想确保在所有输入框中,用户只输入了数字,那么让我们找出所有不匹配的输入并突出显示它们。

$("input:text")
    .filter(function() {
        return this.value.match(/[^\d]/);
    })
    .addClass("inputError")
;

当然,如果只是这样的话,你可以使用表单验证插件,但是这种方法可以应用于你喜欢的任何类型的元素。另一个例子来说明我的意思:找出所有id匹配/[a-z]+_\d+/的元素

$("[id]").filter(function() {
    return this.id.match(/[a-z]+_\d+/);
});

【讨论】:

    【解决方案2】:

    我正在使用 jQuery 和 JavaScript,它对我来说很好用:

    var rege = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    if(rege.test($('#uemail').val())){ //do something }
    

    【讨论】:

    • 稍加补充,您的电子邮件地址中没有“+”:var rege = /^([A-Za-z0-9_\+\-\.])+\@ ([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;我并不是说我的完美,我只是说你的不适用于我的电子邮件:-)
    【解决方案3】:

    我相信这样做:

    http://bassistance.de/jquery-plugins/jquery-plugin-validation/

    它为 URL 和电子邮件地址等内容提供了内置模式,我认为您也可以使用自己的模式。

    【讨论】:

    • 但是一般的正则表达式匹配呢?也许像在某些文本中搜索正则表达式等。
    • 好吧,我的意思是你可以直接使用 javascript 的正则表达式,如果这就是你需要做的一切...regular-expressions.info/javascript.html
    • 只有我一个人,还是 JQUERY 的网站很糟糕?我不能轻易找到如何使用或下载这个东西。
    【解决方案4】:

    除非您正在寻找特定的东西,否则您已经可以使用带有字符串的常规 Javascript 进行正则表达式匹配。

    例如,您可以通过这样的方式使用字符串进行匹配...

    var phrase = "This is a phrase";
    phrase = phrase.replace(/is/i, "is not");
    alert(phrase);
    

    除了一般的正则表达式匹配之外,您是否还在寻找其他东西?

    【讨论】:

    • 您的示例将返回“这不是一个短语”! :-)
    • 有趣的问题 - 我从来没有真正运行过代码,但你是对的 - 它匹配第一个 'is',它实际上是在单词 'This' 的末尾 - 因为它忽略了其余的它对第二个'is'没有任何作用的字符串。非常有趣:)
    • -1 for not enough jQuery ... ... 好吧,开个玩笑,我实际上赞成你的回答 :)
    【解决方案5】:

    我的代码:

    $("input.numeric").keypress(function(e) { /* pour les champs qui ne prennent que du numeric en entrée */          
                var key = e.charCode || e.keyCode || 0;                     
                var keychar = String.fromCharCode(key);
                /*alert("keychar:"+keychar + " \n charCode:" + e.charCode + " \n key:" +key);*/
                if (  ((key == 8 || key == 9 || key == 46 || key == 35 || key == 36 || (key >= 37 && key <= 40)) && e.charCode==0) /* backspace, end, begin, top, bottom, right, left, del, tab */
                        || (key >= 48 && key <= 57) ) { /* 0-9 */
                    return;
                } else {
                    e.preventDefault();
                }
            });
    

    【讨论】:

    • 这没有使用正则表达式
    【解决方案6】:

    一个简单的现代例子:

    $('#some_input_id').attr('oninput',
    "this.value=this.value.replace(/[^0-9A-Za-z\s_-]/g,'');")
    

    这意味着所有不匹配正则表达式的东西都变成了无,即''

    【讨论】:

      【解决方案7】:

      来自 jquery.validate.js(由 joern),由 Scott Gonzalez 贡献: http://projects.scottsplayground.com/email_address_validation/

      /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i
      

      如果您使用的是 MVC Razor,请确保将 @@ 加倍:

       /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i
      

      想吃意大利面吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多