RegexTextBox: 一个 Windows 控件库





4.00/5 (1投票)
具有正则表达式屏蔽和验证功能的文本框。
引言
这个单一的控件库旨在填补开发者基本工具箱中的空白。RegexTextBox
是一种控件,它根据正则表达式限制用户输入并验证该输入。RegexTextBox
可以添加到工具箱中,并附带其自己的工具箱图像。
先决知识
本文假设您知道如何将控件添加到工具箱中。
背景
作为 Windows 窗体的常用开发者,我发现我经常需要一个文本框,该文本框可以限制用户输入并验证输入。 这是论坛上经常讨论的话题,并且已经发布了各种其他解决方案。 但是,这些解决方案的范围是有限的。 例如,您可以找到一个文本框的解决方案,该文本框仅将输入限制为数字或字母,但是对于一个文本框,它将输入限制为数字 1 到 4 以及字母 A、C 或 F 又如何呢? 引入正则表达式的力量来解决这个问题和 RegexTextBox
。
使用代码
如果您不熟悉正则表达式,那么现在可能是时候了。 欲了解快速介绍和一些实践经验,请访问 regexlib.com。
RegexTextBox
包含两个重要的属性。 第一个也是最重要的属性是 RegexKeysSet
。 此属性包含用于标识要接受和拒绝哪个按键的正则表达式。
例如,让我们检查一下我们希望用户输入一个小数的情况。 在这种情况下,我们希望接受以下键:0 到 9 和小数点。
如果您的 RegexTextBox
名为 rgxTextbox
,那么我们将像这样设置 RegexKeysSet
rgxTextbox.RegexKeysSet = "^[0-9\.]$"
设置该属性后,RegexTextBox
将仅允许输入这些键。 为了实现这一点,OnKeypress
事件被重写,如下所示
Protected Overrides Sub OnKeypress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
Dim keyInput As String = e.KeyChar.ToString()
Dim ValidInput As Boolean = True
If [Char].IsLetterOrDigit(e.KeyChar) Then
ValidInput = Regex.IsMatch(keyInput, RegexKeysSet)
ElseIf [Char].IsPunctuation(e.KeyChar) Then
ValidInput = Regex.IsMatch(keyInput, RegexKeysSet)
ElseIf [Char].IsSeparator(e.KeyChar) Then
ValidInput = Regex.IsMatch(keyInput, RegexKeysSet)
ElseIf [Char].IsSymbol(e.KeyChar) Then
ValidInput = Regex.IsMatch(keyInput, RegexKeysSet)
ElseIf [Char].IsWhiteSpace(e.KeyChar) Then
ValidInput = Regex.IsMatch(keyInput, RegexKeysSet)
End If
'if the keyInput is not in RegexKeysSet then consume the key
If Not ValidInput Then e.Handled = True
End Sub
但是,这并不能阻止用户输入无效文本。 它只是屏蔽输入。 使用上面的示例,可以在 RegexTextBox
中输入以下内容
"00.12.588.12", "145", ".65"
这就是为什么存在第二个名为 RegexValidText
的属性。 再次使用上面的示例,如果我们要测试有效的小数输入,我们将设置 RegexValidText
属性并调用 IsValidText
方法。
设置 RegexValidText
属性
rgxTextbox.RegexValidText = "^\d*\.?\d*$"
以下示例将更改 RegexTextBox
的背景颜色以指示有效输入
Private Sub rgxTextBox_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles rgxTextBox.TextChanged
If rgxTextBox.IsValidText Then
rgxTextBox.BackColor = Color.Green
Else
rgxTextBox.BackColor = Color.Red
End If
End Sub
如果您需要阻止输入无效文本,那么您将需要添加一些自己的代码。 这种被动的验证方法使我可以选择我想对无效输入做什么以及何时对其进行测试。
关注点
此控件的功能限制仅受您对正则表达式的创造力的限制。 即使您不是正则表达式的大师,您也可以随时搜索适合您需求的表达式,然后自己编写 RegexKeysSet
的表达式(一旦您掌握了它,就相对简单)。