在文本字段中检查URL是重复的

时间:2015-09-02 07:17:49

标签: jquery regex

我有一个文本字段,我们可以复制并粘贴网址。有时用户会将网址粘贴两次,如

"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,那么它是重复的。尝试找到重复的最佳选项。

4 个答案:

答案 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.lengthstring.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;
&#13;
&#13;

<div id="r"/>逻辑要么添加uniq[1].substring(0, 4) !== "http" ? "http://" + uniq[1] : uniq[1],要么取决于获得的结果。