2013-07-18 74 views
5

Tôi đã cố kiểm tra xem url có hợp lệ hay không hợp lệ. các kiểm tra của 7,8 trả về kết quả đầu ra sai.Kiểm tra xem url có hợp lệ hay không

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

hãy giúp tôi giải quyết.

bất kỳ trợ giúp nào được đánh giá cao!

+4

Hãy nhớ rằng 'www' chỉ là một tên miền phụ. Tôi sẽ không bận tâm bao gồm một cách rõ ràng trong regex. –

+1

Rất nhiều thứ có thể là URL hợp lệ, ví dụ: 'http: // xyz.mysite.org.ru' Tôi đoán thử nghiệm thực sẽ thử và tải nó –

+1

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

Trả lời

7

Hãy thử này:

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

Thật không may điều này chạy 'true' cho learnRegExp ("http: // fgsdfjgd") là tốt, mà nên là 'sai' – patrick

0

Vấn đề với 7 là (www\.)? là cho phép 0 hoặc 1 www.[a-z0-9\-\.] phép . Kể từ khi nó chỉ ww. sau đó (www\.)? xử lý nó như là 0 và [a-z0-9\-\.] nắm bắt được ww..

Vấn đề với 8 là \.[a-z]{3} chỉ cho phép .com, .net, v.v. Nó buộc chuỗi sau . cuối cùng dài 3 ký tự. Vì nó chỉ có 2 ký tự, nó không khớp.

Đừng cố gắng tái tạo lại bánh xe: What is the best regular expression to check if a string is a valid URL?

+2

tiếc là RegExp trên trang đó là trong PHP, không phải trong JavaScript như đã được yêu cầu ... – patrick

Các vấn đề liên quan