我有一个文本字段,我们可以复制并粘贴网址。有时用户会将网址粘贴两次,如
"http://www.google.com/test/index.htmlhttp://www.google.com/test/index.html".
我怎样才能发现该网址是重复的。
我尝试使用以下代码
var url="http://www.google.com/test/index.htmlhttp://www.google.com/test/index.html";
var exp =/https?:\/\//gi;
alert(url.match(exp).length);
如果长度大于1,那么它是重复的。尝试找到重复的最佳选项。
答案 0 :(得分:0)
我建议使用更好的正则表达式。您不需要单独检查每个可能的问题,如果用户输入与正则表达式不匹配,则它无效。请尝试以下方法:
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
答案 1 :(得分:0)
如果客户端始终使用http:前缀粘贴url,只需在String中计算':'。如果不止一个,你会知道格式错误。
计算字符数的帮手 Java: How do I count the number of occurrences of a char in a String?
答案 2 :(得分:0)
如果您只是想检测某人双重粘贴,您可以使用string.length
和string.substring
来检测重复内容,例如:
if (url.length % 2 === 0 && url.substring(0, url.length/2) === url.substring(url.length/2, url.length/2)) {
alert('Dupe');
}
也就是说,如果您尝试检测与模式匹配的重复项,我猜您可以使用模式捕获组和反向引用,例如:
/^(https?:\/\/.*)\1$/
答案 3 :(得分:0)
我建议使用channels_str = channels.getvalue()
data['channel'] = channels_str
return dumps(data)
将字符串开头的所有字符与/^(\S+)\1+$/
匹配,然后使用(\S+)
反向引用来查看序列是重复,三倍还是四倍(\1+
使这种重复成为可能)。
因此,您可以使用
+

function sanitizeUrl(urls) {
var uniq = urls.match(/^(\S+)\1+$/);
if (uniq !== null) {
return uniq[1].substring(0, 4) !== "http" ? "http://" + uniq[1] : uniq[1];
}
}
var urls = "google.com/test/index.htmlgoogle.com/test/index.html"; // No HTTP
document.getElementById("r").innerHTML = sanitizeUrl(urls) + "<br/>";
urls = "http://www.google.com/test/index.htmlhttp://www.google.com/test/index.htmlhttp://www.google.com/test/index.html";
document.getElementById("r").innerHTML += sanitizeUrl(urls);
&#13;
<div id="r"/>
逻辑要么添加uniq[1].substring(0, 4) !== "http" ? "http://" + uniq[1] : uniq[1]
,要么取决于获得的结果。