我正在使用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://
并再次运行它。
表单提交后,应该在服务器端操作数据。您应该只从自定义方法返回true
或false
,而不是操纵任何数据,也不应该通过编程多次通过同一规则强制相同的数据。要么用户输入了正确的格式,要么他没有。。。用户然后重试。