2013-11-26 42 views
-1

我要檢查,如果一個文本框包含一個有效的URL中使用正則表達式。有效的網址可以如下所示。驗證URL與有效的端口號和查詢字符串

http://www.google.com 
https://www.google.com 
http://clrs.mlslist.com:6103/ 
http://clrs.mlslist.com:6103/premium/login 
http://reso.mlslisting.com/premium/login?rets-version=rets/1.5 

有人可以幫我構建ASP RegularExpressionValidator的驗證表達式嗎?

+0

除了明顯不使用任何的搜索 - 你嘗試過什麼? 正則表達式不是一個合適的工具來驗證URL - http://stackoverflow.com/questions/827557/how-do-you-validate-a-url-with-a-regular-expression-in-python(你可以發明一個子集,正則表達式匹配RFC的子集爲您的臨時需求,但是你會堅持與完善正則表達式,以適應越來越多地進入它隨着時間的推移,這是不正確的做法) – Vlad

回答

1

這是應該滿足您的需求相當寬鬆的正則表達式:

^https?://[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.\w+(:\d+)?(/[\w-=.?]+)*/?$ 

需要http://https://

需要一組字符,後面可以跟多套用點分隔的字符(如googlewww.googleimg1.srv2.google)。

需要另一個.接着一個字符集(例如.com)。

允許可選的端口(例如:8080

從那裏允許套字/數字字符和符號-=.?通過/ S離開(例如/premium/login?rets-version=rets/1.5

RegExr Example

+0

老實說,雖然,這已經被髮布到死亡。 – OGHaza

+0

嘗試爲此使用正則表達式不是一個好習慣。你會讓自己進入延長(修復和改進)正則表達式的長循環 - 一旦它被拋光到完美(並且佔據5個屏幕的文本) - 你會發現它效率很低;) 只有幾個例子: 'http:// localhost:80/index.html'' http://aa.bb:0 /''http://a._:99999 /' - 列表是無止境的) – Vlad

+0

它匹配第二個這些例子,第三個幾乎肯定是一個無效的網址。 '._'不能成爲真正的頂級域名。它只與本地主機地址不匹配,因爲我故意使它更復雜,因此它不會。如果我試圖從日誌文件中提取URL,我會使用正則表達式,因爲它是一個簡單的解決方案。 – OGHaza

0

使用RegularExpressionValidator和表達設置爲這樣的事情:

^([\ S \ s]的{0,4})$

替換4以所需的長度(最大值)

<asp:TextBox id="txtbx" Runat="server" /> 

<asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server" 
     ErrorMessage="Error: RegularExpressionValidator" 
     ValidationExpression="^([\S\s]{0,4})$" 
     ControlToValidate="txtbx" /> 

<asp:Button ID="Button1" runat="server" Text="Button" /> 
+0

不工作。表達式只是驗證我在文本框中鍵入的任何內容。 –

+0

@Vinyak所有的正則表達式的作用是檢查的長度。它也允許換行,它肯定應該''{0,4}'更合適,但當然還是不合適的。對於頭 – OGHaza

+0

@OGHaza好,謝謝了...... –