jQuery 验证不对 URL 使用双引号

jQuery Validate not working on URL with double quotes

jQuery Validate 插件似乎无法验证带双引号的 URL,例如:

https://pubads.g.doubleclick.net/gampad/ads?sz=3x3&iu=/xxxxxxx/xxxx_xxxxx&ciu_szs&impl=s&gdfp_req=1&env=vp&output=xml_vast2&unviewed_position_start=1&url="+ document.referrer + "&description_url=xxx.xxx&correlator=" + Math.floor(Date.now() / 1000)

但是,它将验证第一个双引号。由于我正在遍历我的表单字段名称,我如何在它被循环以转义 " 之前将正则表达式应用于该字段。或者 jQuery 验证插件有更好的方法吗?

原文URL:

https://pubads.g.doubleclick.net/gampad/ads?sz=3x3&iu=/xxxxxxx/xxxx_XXX_xxxxxx&ciu_szs&impl=s&gdfp_req=1&env=vp&output=xml_vast2&unviewed_position_start=1&url="+ document.referrer + "&description_url=xxxxxx.com&correlator=" + Math.floor(Date.now() / 1000)

JSFIDDLE

您的 OP 中的示例 URL(带有空格和引号)无效,url 规则正在正确评估它。

Or is there a better way with the jQuery Validate plugin?

对于内置规则不适用于您的规范的任何情况,您可以编写自己的自定义规则。构建新函数并使用 the .addMethod() method 声明它,使用标准 url 规则作为基础。

只需adjust this regex根据您的规格...

jQuery.validator.addMethod("myURL", function( value, element ) {
    return this.optional(element) || /^(https?|s?ftp):\/\/(((([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.');

用法:

rules: {
    // other rules,
    adTag: {
        myURL: true
    }
}