使用 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
)。
解决方案 - 由 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
)。