2011-02-08 50 views
1

一旦將有效的URL輸入到文本字段中,立即調用函數(myFunction())的最佳方式是什麼?我搜索了一下,但我沒有找到任何有用的東西。使用正則表達式可能是最好的,但我需要一個可以識別各種URL:
http://google.tld,www.google.tld,http://www.google.tld 但仍不認爲像「index.php」這樣的東西是一個URL。有沒有人知道這樣的表達?如果在文本區域中找到有效的URL,調用函數

+1

請不要把標籤放在t他的頭銜。 – SLaks 2011-02-08 16:30:35

+0

* google.com * vs * index.php *是棘手的,因爲要知道前者是一個URL的唯一方法是在正則表達式本身中有一個有效的頂級域名列表,使其變得緩慢和複雜。隨着新TLD的添加,這樣的清單也需要更新,因此維護成本更高。你應該使`http://`成爲一項要求。 – 2011-02-08 16:33:16

回答

0

這將匹配以類似「.com」或「.CH」結尾的網址(你必須保持有效的頂級域名的列表)支持JavaScript的forwardslash不需要逃避

^(http:\/\/)?([\w\.]+\.)((com)|(ch))$ 

而TLD可能不那麼嚴格,例如只是2-4個字符的東西。

通過CanSpice考慮到這個問題,評論允許具有不同長度頂級域名的想法是難以掩蓋的事件觸發可能太早火。 onchange觸發器上的時間延遲可以解決這類問題。 每個解決方案的精確要求和優缺點應加權。

example at rubular

0

你可能會掙扎了一下因爲會有這麼多不同的可能性。這人會匹配任何URL,它在技術上是有效的HTTP或HTTPS路徑(包括路徑中的任何字符的域名後,任何數量的子域等)

((http)s?(://))?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*(/(.*))? 

,如果你想排除內部網,您可以使用強制TLD如下:

((http)s?(://))?[a-zA-Z0-9\-]+(\.[a-zA-Z0-9]+)*(\.[a-zA-Z0-9]{2,4})+(/(.*))? 
0

^((?:HTTPS | FTP):\/\ /)([\ w \。] +)([AZ] {? 2,4})$

支持ftp以及;)

相關問題