6

I tried to check if url is valid or invalid. the checks of 7,8 returns wrong outputs.

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]);
}

please help me to solve it.

any help appreciated!

basher
  • 2,381
  • 1
  • 23
  • 34
Alon Shmiel
  • 6,753
  • 23
  • 90
  • 138

2 Answers2

7

Try this one:

 function learnRegExp(s) {    
      var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
      return regexp.test(s);    
 }
trejder
  • 17,148
  • 27
  • 124
  • 216
Ishan Jain
  • 8,063
  • 9
  • 48
  • 75
0

Problem with 7 is (www\.)? is allows 0 or 1 www. and [a-z0-9\-\.] allows . Since it's only ww. then (www\.)? treats it as 0 and [a-z0-9\-\.] captures the ww..

Problem with 8 is \.[a-z]{3} only allows for .com, .net, etc. It forces the string after the last . to be 3 characters long. Since it's only 2 characters, it doesn't match.

Don't try to recreate the wheel: What is the best regular expression to check if a string is a valid URL?

Community
  • 1
  • 1
basher
  • 2,381
  • 1
  • 23
  • 34