6

我试图检查 url 是否有效。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]);
}

请帮我解决它。

任何帮助表示赞赏!

4

2 回答 2

8

试试这个:

 function learnRegExp(s) {    
      var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
      return regexp.test(s);    
 }
于 2013-07-18T14:56:24.473 回答
0

7 的问题(www\.)?是允许 0 或 1www.[a-z0-9\-\.]允许. 因为它只是ww.(www\.)?其视为 0 并[a-z0-9\-\.]捕获ww..

8 的问题\.[a-z]{3}仅允许.com,.net等。它强制最后一个字符串.为 3 个字符长。由于它只有 2 个字符,因此不匹配。

不要尝试重新创建轮子:检查字符串是否为有效 URL 的最佳正则表达式是什么?

于 2013-07-18T14:42:26.277 回答