我试图检查网址是有效还是无效。 7,8的检查会返回错误的输出。
alert('1: ' + learnRegExp('http://www.google-com.123.com')); // true
alert('2: ' + learnRegExp('http://www.google-com.123')); // false
alert('3: ' + learnRegExp('https://www.google-com.com')); // true
alert('4: ' + learnRegExp('http://google-com.com')); // true
alert('5: ' + learnRegExp('http://google.com')); //true
alert('6: ' + learnRegExp('google.com')); //true
alert('7: ' + learnRegExp('ww.google.com')); //false -> it returns true
alert('8: ' + learnRegExp('www.google.co.il')); //true -> it returns false
alert('9: ' + learnRegExp('http://ww.google.co.il')); //false
alert('10: ' + learnRegExp('https://ww.google.co.il')); //false
function learnRegExp(){
return /((ftp|https?):\/\/)?(www\.)?[a-z0-9\-\.]{3,}\.[a-z]{3}$/
.test(learnRegExp.arguments[0]);
}
请帮我解决。
任何帮助表示赞赏!
答案 0 :(得分:7)
试试这个:
function learnRegExp(s) {
var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
return regexp.test(s);
}
答案 1 :(得分:0)
问题7是(www\.)?
允许0或1 www.
而[a-z0-9\-\.]
允许.
因为它只有ww.
然后(www\.)?
才会对它进行处理为0,[a-z0-9\-\.]
捕获ww.
。
问题8 \.[a-z]{3}
仅允许.com
,.net
等。它会强制最后一个.
后的字符串长度为3个字符。由于它只有2个字符,因此不匹配。
不要尝试重新创建方向盘:What is the best regular expression to check if a string is a valid URL?