配置JQ验证以接受不带http://前缀的URL

时间:2015-04-01 05:26:16

标签: jquery regex jquery-validate

我正在使用Jquery Validate,我需要一个自定义验证方法。

默认URL方法除非具有架构,否则不接受URL。我的用户只会提供以http://开头的网址,因此我不必每次都要麻烦地输入网页。

我正在尝试创建一个验证方法,该方法将使用默认的URL方法来检查URL的有效性。如果失败,我想先添加http://并再次运行它。这就是我到目前为止所拥有的:

addCustomUrlValidator: function () {
    $.validator.addMethod("short-url", function(value, element) {

        if (value.length == 0) return true;  // the field is optional

        // attempt to validate with default URL method.  Return true on valid.
        // ...

        // prepend http:// to value and attempt validation again.  Return true on valid.
        // ...

        return false

    }, jQuery.validator.format("Must be a valid URL format"));
}

1 个答案:

答案 0 :(得分:1)

  

我正在使用Jquery Validate,我需要一个自定义验证方法。

请参阅the .addMethod() method documentation,了解我们如何在下面进行操作。

  

默认URL方法除非具有架构,否则不接受URL。我的用户只会提供以http://开头的网址,所以我不想让他们每次都输入它的麻烦。

我已经从默认的url方法inside the plugin复制了函数本身并编辑了正则表达式,因此您不需要URI方案。 (我只是删除了正则表达式的(https?|s?ftp):\/\/部分。)请注意,这个新规则称为my_url,您可以将其更改为您想要的任何内容。

jQuery.validator.addMethod('my_url', function( value, element ) {
    // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
    return this.optional( element ) || /^(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([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])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test( value );
}, 'Please enter a valid url without the "http".');
  

如果失败,我想先添加http://并重新运行。

在提交表单后,您应该在服务器端执行操作数据。您应该只从自定义方法返回truefalse,不操纵任何数据,也不能以编程方式多次通过同一规则强制执行相同的数据。用户输入的格式正确,或者他没有输入...用户然后再次尝试。