0

我正在尝试进行阻止“^$/()|?+[]{}><”元字符的服务器端验证任何人都可以让我了解为什么会这样。我是新手:/(TextBox3 是一个接受输入的 asp 文本框)

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.
4

1 回答 1

0

那是因为字符串^$\/()|?+[]{}><是正则表达式元字符。在传递给正则表达式函数之前,您需要对它们进行转义:

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

更新答案:

检查文本是否包含任何正则表达式元字符的 2 种方法:

方法一:使用正则表达式

元字符需要放在字符类[...]中。因此,只有部分字符需要转义,即^:\].

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

方法二:使用IndexOfAny字符串函数

此方法不使用正则表达式,因此无需转义。

    If TextBox1.Text.IndexOfAny("^$\/()|?+[]{}><".ToCharArray) > -1 Then
        ' Invalid input
    Else
        ' Valid
    End If
于 2013-04-27T04:49:39.243 回答