使用 RegEx 验证用户输入

Using RegEx to Validate User Input

解决方案 - 由 Wiktor 提供 - 我已将其实施到我的问题中。

在用户输入时验证用户输入以匹配以下格式 - 11A11

    Private Sub RegexFormatterExample(sender As Object, e As EventArgs)

    Dim txt As TextBox = sender
    Dim pattern As String = ""

    Select Case txt.Name
        Case "txt_example"
            pattern = "^\d{1,2}(?:(?<=^\d{2})[A-Z]\d{0,2})?$"
        Case Else
            pattern = "^\d{1,2}(?:(?<=^\d{2})[A-Z]\d{0,2})?$"
    End Select

    Dim strText As String = txt.Text

    While Not Regex.IsMatch(strText, pattern) AndAlso Not strText = ""
        strText = strText.Substring(0, strText.Length - 1)
    End While

    txt.Text = strText
    txt.Select(txt.Text.Length, 0)
End Sub

我还将 .TextChanged 处理程序附加到指定的文本框。

提供的答案只允许用户按我要求的以下格式输入。

谢谢 Wiktor!

编辑

在这种情况下,还有一种情况是用户只能输入减号,而不是在他们不知道值的地方传递空字符串。

为了实现这一点,我将 RegEx 模式修改为以下内容。 Regex Demo

我不确定这是否是最有效的方法,但它似乎对我有用。

也许你可以 trim\n 关闭(如果有的话)并使用

"^[0-9]{2}[A-Z][0-9]{2}$"

代替?

您可以使用

^\d{1,2}(?:(?<=^\d{2})[A-Z]\d{0,2})?\z

参见 .NET regex demo online\z 替换为 \r?$,因为演示是 运行 针对单个多行字符串)。

详情

  • ^ - 字符串开头
  • \d{1,2} - 一位或两位数
  • (?: - 非捕获组的开始:
    • (?<=^\d{2}) - 正向后视检查:紧靠当前位置左侧的字符串开头必须有两个数字
    • [A-Z] - 大写字母
    • \d{0,2} - 0、1 或 2 位数字
  • )? - 非捕获组结束,重复 1 次或 0 次(即可选)
  • (?:[A-Z]\d{0,2})? - 大写字母和 0、1 或 2 位数字的可选序列
  • \z - 字符串的末尾(字符串末尾不允许 \n)。