2013-04-27 89 views
0

我試圖做一個服務器端驗證,阻止「^ $ /()|?+ [] {}> <」元字符 任何人都會給我一些關於這個原因的信息。 我是新來的:/(TextBox3是一個ASP textboxe這需要輸入)在VB中服務器端驗證

Imports System.Text.RegularExpressions 

Partial Class Default2 
Inherits System.Web.UI.Page 

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 

    If Regex.IsMatch(TextBox3.Text, "^$\/()|?+[]{}><") Then 
     Label1.Text = "Invalid input" 

    End If 
End Sub 
End Class 

錯誤:

Exception Details: System.ArgumentException: parsing "^$\/()|?+[]{}><" - Unterminated  [] set. 
+0

定義「不起作用」。另外,'form1'是指什麼? – 2013-04-27 04:32:31

+0

你爲什麼使用'form1.InnerText'?你期望什麼會返回? – ajakblackgoat 2013-04-27 04:46:05

回答

0

這是因爲串^$\/()|?+[]{}><是正則表達式的元字符。你需要傳遞給正則表達式函數之前逃離他們:

If Regex.IsMatch(TextBox3.Text, Regex.Escape("^$\/()|?+[]{}><")) Then 
     Label1.Text = "Invalid input" 
    End If 

修訂答:

2的方法來檢查,如果文本包含任何正則表達式元字符:

方法1:使用正則表達式

元字符需要放在字符類[...]中。因此,只有部分字符需要轉義,即:^,\]

If Regex.IsMatch(TextBox1.Text, "[\^$\\/()|?+[\]{}><]") Then 
     ' Invalid input 
    Else 
     ' Valid 
    End If 

方法2:使用IndexOfAny字符串函數

這種方法不使用正則表達式的話,就沒有必要逃跑。

If TextBox1.Text.IndexOfAny("^$\/()|?+[]{}><".ToCharArray) > -1 Then 
     ' Invalid input 
    Else 
     ' Valid 
    End If 
+0

謝謝ajakblackgoat,你知道爲什麼我的Label1沒有顯示「無效輸入」,當我把其中一個字符放在Textbox3中嗎? – DDDD 2013-04-27 04:52:49

+0

這是因爲輸入文本必須匹配確切的正則表達式模式。我已經在上面編輯了我的答案,以包含兩種方法來進行驗證。 – ajakblackgoat 2013-04-27 06:08:17