jQuery验证不处理带双引号的URL
jQuery Validate插件似乎不使用双引号验证URL,例如:jQuery验证不处理带双引号的URL,jquery,regex,json,jquery-validate,Jquery,Regex,Json,Jquery Validate,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 + "&
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)
OP中的示例URL(带空格和引号)无效,并且
URL
规则正在正确评估该URL
或者jQuery验证插件有更好的方法吗
对于内置规则不适用于您的规范的任何情况,您都可以编写自己的自定义规则。使用标准url
规则作为基础,构造新函数并使用进行声明
只需按照您的规格
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
}
}
您是否尝试将这些引用的URL编码为
%22
?问题是jquery验证插件首先命中字段。在命中验证插件之前,我如何在字段上运行encodeURI
?请再次在OP中发布足够的代码来创建一个。不要完全依赖JSFIDLE。谢谢。显然,确实存在除此之外,还有引号。将它们全部删除,您的URL仍然无效。您不能有一个带空格的有效URL。@Sparky,当前应用中的所有内容都处于混乱状态。在那里更容易看到和运行。URL是有效的,我刚刚用“x”替换了实际的URL和帐户ID信息”“是的。输入表单中最后一个文本区域的URL被放入代码中的值中,该值嵌入到站点中。但是,您提供的正则表达式不起作用。