2012-07-10 111 views
3

我的正則表達式驗證成功的網址,除了http://www.google如何使用JavaScript驗證我的URL有效性?

下面是的jsfiddle我的URL驗證:http://jsfiddle.net/z23nZ/2/

它正確地驗證以下網址:

http://www.google.com

www.google.com

http:// www.

......但不是這一個:

http://www.google

這是不正確的在這種情況下返回true 。我如何驗證該案例?

+6

事實上,「http:// www.google」是一個URL的有效格式(事實上,隨着新的自定義頂級域名出來,它甚至可能成爲一個有效的地址,但更有可能只是'http:// google')。如果你想檢查它是否是一個有效的地址,唯一的方法就是嘗試訪問它並查看服務器是否響應(或者至少在你的DNS中查看它)。 – Thor84no 2012-07-10 09:58:49

+0

我並不熱衷於分析這樣一個漫長而複雜的正則表達式,但我會說它比需要像'[az] | \ d | - | \。| _ |〜〜 '而不是'[az \ d._〜 - ]'重複。 (如果你允許大寫,你可以進一步簡化。) – nnnnnn 2012-07-10 10:02:00

+0

[看看這個SO帖子。 ] [1]可以幫助你...... [1]:http://stackoverflow.com/questions/161738/what-is-the-best-regular-expression-to-check-if- a-string-is-a-valid-url – 2012-07-10 10:02:06

回答

1

我認爲你需要的方式來簡化這一點。在那裏有很多URL驗證RegExes,但作爲練習,我會通過我的思維過程來構建一個。

  1. 首先,你需要的,如果有一個匹配的協議:/((http|ftp)s?:\/\/)?
  2. 然後匹配的一系列非空白字符:\S+
  3. 如果你想挑選出從文本中的網址,你將要尋找它是一個URL的跡象。尋找點或斜線,然後多個非空白:[\.\/]\S*/

現在把它放在一起:

/(((http|ftp)s?:\/\/)|(\S+[\.\/]))\S*[^\s\.]*/ 

我猜你試圖尋找www.google是因爲新的頂級域名。事實是,這樣的URL可能看起來像google,所以任何單詞都可能是一個URL。試圖想出一個可以匹配有效網址的全面正則表達式,而其他任何東西都是不可能的,所以你最好只用上面這樣簡單的東西。

編輯:我堅持一個|在那裏的協議部分和非空白,當時的點或斜線部分之間的匹配http://google如果人們選擇寫這樣的

新網址編輯2:查看下一個改進的評論。它確保匹配google.comhttp://google匹配,甚至google/匹配,但不匹配a.

+0

它的絕對正確我的frnd我們不能驗證如此完美。 – 2012-07-10 11:43:32

+1

我不確定我是否理解'|'背後的想法。酒吧不會幫助匹配'http:// google',至少不會像你想要的那樣。據我所知,主要結果是你有一個短路,幾乎可以接受任何東西(根據該正則表達式「a.」是有效的)。 – Thor84no 2012-07-10 11:52:13

+1

@ Thor84no,'|'的想法是它會接受'http:// google',或'google.com',並在末尾加上'*'的位置(而不是'+' )是URL可以以斜槓結尾。 'a.'確實通過網絡。我其實是爲了迎合這一點,因爲我討厭它,當電子郵件被解析爲包含作爲超鏈接的一部分的全站。我會解決它。 – 2012-07-10 13:54:31