2014-04-08 53 views
-3

我使用下面的正則表達式使用JavaScript定期對URL端口

/http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}/ 

驗證URL表達現在的形式http://example.com

我想這也驗證端口號的上述只會驗證網址。例如,應該驗證http://example.com:8080http://example.com:80

如何修改相同的正則表達式以支持端口號驗證(應該是強制的)?

+1

爲什麼你認爲頂級域名會長3個字母? –

+1

你到目前爲止嘗試過什麼?(我不會想這樣對32金徽章的人說這個,對我來說沒有downvote,順便說一句) – Boldewyn

+0

所以你說我不應該只考慮.com,而且.net,.info等 – testndtv

回答

0

使用本:

^http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}(?:\:\d+)$ 

演示在這裏:

http://regex101.com/r/lW5aL3

僅通過端口號的URL將被驗證,我已經在年底前加(?:\:\d+)使一個冒號和一個或多個數字可以被驗證。你可以通過使用這樣的量詞{}明確地把你想要的數字的位數置爲這樣:

(?:\:\d{4})這將只允許四位數字。結腸

更新後

運算要求做出這個表達式通行證數字2-4

只是quatifier改變

(?:\:\d{2,4})

+0

[http://.....com:80](http://.....com:80)呢? –

+0

如果我想允許2-4位數作爲端口號怎麼辦?像我想要的:70,:701,:7001有效 – testndtv

+0

@testndtv檢查我的更新 – aelor

2

首先第一件事情,你目前的正則表達式不符合有效比例的有效網址:

  • 它不匹配HTTPS地址
  • 它不匹配短域名(例如http://xe.com/
  • 它不符合任何TLD這不是長3個字符(所有國家代碼爲2個字符和許多其他頂級域名(TLD)較長 - 特別是最近/即將開通的新頂級域名(TLD))

其中一個或所有這些限制都可能是故意的,但這不是提及它的缺點。

其次,您可以傳遞/.../i修飾符來創建不區分大小寫的正則表達式,而不是使用[A-Za-z...]

由於考慮到這些事情,下面的更改可:

/^(https?):\/\/([A-Z\d\.-]{2,})\.([A-Z]{2,})(:\d{2,4})?/i 

編輯:更新,以數字2和4之間的端口號。

+0

Thx很多。 ..我希望網址應該包含2-4位數之間的端口號。 – testndtv

+2

是否有特殊原因將其限制爲2-4位數?有效的端口號是1到65535範圍內的任何數字(我相信* nix空間(也許是其他的)),1024以下的任何東西都需要root權限來監聽)。 – Phylogenesis