将JQ Validate配置为接受不带http://前缀的URL



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

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

我正在尝试创建一个验证方法,该方法将使用默认的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"));
}

我使用的是Jquery Validate,我需要一个自定义的Validate方法。

请参阅下面的.addMethod()方法文档,了解如何执行此操作。

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

我已经从插件中的默认url方法复制了函数本身,并编辑了regex,这样就不需要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-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:)*@)?(((d|[1-9]d|1dd|2[0-4]d|25[0-5]).(d|[1-9]d|1dd|2[0-4]d|25[0-5]).(d|[1-9]d|1dd|2[0-4]d|25[0-5]).(d|[1-9]d|1dd|2[0-4]d|25[0-5]))|((([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).)+(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).?)(:d*)?)(/((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)+(/(([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)*)*)?)?(?((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)|[uE000-uF8FF]|/|?)*)?(#((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)|/|?)*)?$/i.test( value );
}, 'Please enter a valid url without the "http".');

如果失败,我想准备http://并再次运行它。

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

最新更新