2011-04-13 65 views
0

網站地址:正則表達式當我在頁面上使用正則表達式驗證器具有以下的正則表達式驗證在ASP.NET

<asp:RegularExpressionValidator ID="regexWebsiteValidator" runat="server" ControlToValidate="ctlWS" ValidationExpression="(http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?" ErrorMessage="Invalid Website Address!" /> 

,並輸入http://www,google.com在文本框中, 如預期的驗證失敗。

如果我使用相同的正則表達式,但嘗試使用Regex.Match匹配它,它會通過。有人能告訴我我做錯了什麼嗎?

string strRegex = @"(http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?"; 
bool b = System.Text.RegularExpressions.Regex.Match("http://www,google.com", strRegex).Success; 

b是true

回答

1

一件事,你是不是使用^(regex goes here)$錨固你的表達。這裏發生的事情是它成功地匹配「google.com」部分。 RegularExpressionValidator控制可能會隱式添加這些錨 - 我不知道非正式因爲我從不使用這些東西。

爲了幫助您進一步調試,請使用Match.Value屬性,以便您可以確切地查看匹配的內容。

更重要的是,不使用正則表達式來驗證URL。 .NET中已有一個Uri類。使用它的方法是Parse

+0

哇,這工作!你能用'^(myregex)$'解釋表達式的錨定嗎? – Dusty 2011-04-13 19:08:56

+0

'^'和'$'是正則表達式「錨」。 '^'匹配輸入的開始,而'$'匹配結束。我建議www.regular-expressions.info瞭解更多信息。 – 2011-04-15 13:34:44

0

我不會被任何想象一個正則表達式的專家,但它並不像你在逃避你strRegex變斜線,你已經得到了@符號在聲明的開頭

嘗試類似:

string strRegex = @"(http(s)?://)?([\\w-]+\\.)+[\\w-]+(/[\\w- ;,./?%&=]*)?"; 
+0

「@」前綴使得字符串被字面解釋。反斜槓不再被解釋爲轉義序列。 – 2011-04-13 15:27:58