我正在为自定义CMS编写一些客户端验证。我需要检查包含文本区域中图像的任何URL,并让用户知道他们需要使用https而不是http。
我已经想出如何搜索以http:
开头的任何网址$('#template_form').submit(function() {
val = $("#template_data").val();
if (val.match(/http:\/\//)) {
alert("You must set all complete image URLs to be https!");
$("#logError").val("true");
return false;
}
return true;
});
但这也适用于所包含的任何常规链接。如果我们可以将其限制为<img>
标签,那么它会更简单,因为我可以获取字符串的最后三个字符,并对图像后缀数组执行indexOf
。
我们无法做到这一点 - 图片网址可以包含在自定义标记中,它可以是alt
参数的一部分,可以作为直接链接或任何数字发布其他的事情。有没有办法测试数组的正则表达式,还是我需要遍历数组并分别针对每个元素运行String.indexOf
?
理想情况下,我会这样做:
suffixes = [".jpg", ",jpeg", ".png", ".gif", ".tiff", ".bmp"];
if (val.match(/http:\/\//)) && suffixes.indexOf(**some kind of regex**) {
alert("You must set all complete image URLs to be https!");
$("#logError").val("true");
return false;
}
但我无法弄清楚那个正则表达式是什么。
答案 0 :(得分:3)
您可以使用图片扩展程序构建正则表达式:
var suffixes = ["jpg", "jpeg", "png", "gif", "tiff", "bmp"];
var re = new RegExp('http://[^>\\s]+?\.(?:' + suffixes.join('|') + ')');
if (re.test(val)) {
alert("You must set all complete image URLs to be https!");
$("#logError").val("true");
return false;
}
代码演示
var val = '<img src="http://www.google.com/test.jpg" />';
var suffixes = ["jpg", "jpeg", "png", "gif", "tiff", "bmp"];
var re = new RegExp('http://[^>\\s]+?\.(?:' + suffixes.join('|') + ')');
console.log(re.test(val));