首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置JQ验证以接受不带http://前缀的URL

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

Stack Overflow用户
提问于 2015-04-01 05:26:15
回答 1查看 1.1K关注 0票数 0

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

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

我正在尝试创建一个验证方法,它将使用默认的URL方法来检查URL的有效性。如果失败,我希望在http://前面加上,并再次运行它。到目前为止,我的情况如下:

代码语言:javascript
复制
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"));
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-24 15:49:57

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

关于我们如何在下面做这件事,请参阅方法文档

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

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

代码语言:javascript
复制
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,而不应操作任何数据,也不应多次以编程方式强制相同的数据通过相同的规则。要么用户输入了正确的格式要么他没有..。用户再试一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29383421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档