2013-07-18 15 views
5

URLが有効か無効かをチェックしようとしました。 7,8のチェックは間違った出力を返します。URLが有効かどうかチェック

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

私はそれを解決するのを手伝ってください。

ありがとうございました! 7と

+4

'www'がちょうどサブドメインであることを忘れないでください。私は正規表現でそれを明示的に含めても構いません。 –

+1

多くのものが有効なURLになります。 'http:// xyz.mysite.org.ru'私は実際のテストは試してロードしようとしていると思います –

+1

https://gist.github.com/dperini/729294 – naomik

答えて

7

は、この方法を試してください。

function learnRegExp(s) {  
     var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; 
     return regexp.test(s);  
} 
+5

残念ながら、これはlearnRegExp( "http:// fgsdfjgd")にも 'true' – patrick

0

問題(www\.)?であり、それは0と[a-z0-9\-\.]ww.を捕捉としてのみww.次いで(www\.)?扱いそれなので、0または1 www.[a-z0-9\-\.].を可能にすることができます。 8と

問題だけ.com.net、などが可能になりますそれは、3文字の長さに最後の.後の文字列を強制\.[a-z]{3}です。それはわずか2文字なので、一致しません。

ホイールを再作成しようとしないでください:What is the best regular expression to check if a string is a valid URL?

+2

残念ながら、そのページのRegExpはJavaScriptではなくJavaScriptで書かれています... – patrick

関連する問題