在哪里添加正则表达式的代码以确保只接受数字[重复]

Posted

技术标签:

【中文标题】在哪里添加正则表达式的代码以确保只接受数字[重复]【英文标题】:Where to add the code for the regular expression to ensure that only numbers are accepted [duplicate] 【发布时间】:2014-06-20 14:19:13 【问题描述】:

我正在尝试将正则表达式添加到下面的代码中,以确保只接受数字。该代码非常基本,它计算正方形的面积并将结果放入 RichTextBox.Text 我正在使用 VB Visual Studio 2012。任何帮助将不胜感激。

------------------------------------------------------
Public Class SquareArea
    Inherits ShapeArea
    Public Overrides Function Area() As Double
        Return (Me.Lengh ^ 2)
    End Function
End Class

------------------------------------------------------------
Public Class Square

    Private Sub Square_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Private Sub ResultButton_Click(sender As Object, e As EventArgs) Handles ResultButton.Click
        Dim area = New SquareArea
        area.Lengh = SideTextBox.Text
        ResultRichTextBox.Text = area.Area()
    End Sub

    Private Sub CloseSquareButton_Click(sender As Object, e As EventArgs) Handles CloseSquareButton.Click
        Me.Close()
    End Sub
End Class

【问题讨论】:

Private Sub SideTextBox_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles WidthTextBox.Validating '你的代码在这里 If (System.Text.RegularExpressions.Regex.IsMatch(WidthTextBox. Text, "^[0-9]*$")) Then MessageBox.Show("请只输入数字。") WidthTextBox.Text.Remove(WidthTextBox.Text.Length - 1) End If End Sub 【参考方案1】:

使用此代码...

Private Sub txtValue_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtValue.KeyPress

        If Char.IsDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False Then
            e.Handled = True
        End If
    End Sub 

【讨论】:

这段代码有效,但我必须使用正则表达式 这段代码不起作用,我不知道为什么。有什么帮助吗? 这段代码不起作用,我不知道为什么。任何帮助 Private Sub SideTextBox_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles WidthTextBox.Validating '你的代码在这里 If (System.Text.RegularExpressions.Regex.IsMatch(WidthTextBox.Text, "^[0 -9]*$")) 然后 MessageBox.Show("请只输入数字。") WidthTextBox.Text.Remove(WidthTextBox.Text.Length - 1) End If End Sub【参考方案2】:

有几种方法可以做到这一点。但最好是使用 SideTextBox 文本框的验证事件。

Private Sub SideTextBox_Validating  (ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtSideTextBox.Validating
'your code here
End Sub 

或 您还可以使用它的 KeyPress 事件,以便在用户输入非数字字符时得到提示。

Private Sub SideTextBox_KeyPress (ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtSideTextBox.KeyPress
'your code here
End Sub 

【讨论】:

不要使用 KeyPress,它不会处理用户粘贴无效输入的情况。验证很好,但更好的是使用 NumericUpDown 控件而不是 TextBox。 @cody 根据他问的 qsn,您可以使用按键来测试输入的字符是否为数字...但感谢您的评论,我会调查您的。【参考方案3】:

我通常不使用 Visual Basic 编写代码,但您希望将 RegularExpression 作为类成员(System.Text.RegularExpressions 命名空间)添加到您的类中。下面显示的正则表达式模式将只允许数字。在正则表达式上调用 Match 方法会返回一个 Match 类,您可以在该类上调用 Success 以获得布尔结果(真/假)

你可能需要稍作改动,因为我通常不会用VB编写,但表达式和类是正确的

'Declare Regular Expression Class, Compile once    
Dim RegularExpression regex As RegularExpression = New RegularExpression("^[0-9]*$", RegExOptions.Compile)
    Private Sub Square_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Private Sub ResultButton_Click(sender As Object, e As EventArgs) Handles ResultButton.Click
        Dim area = New SquareArea
    ' Insert Magic Here
    If regex.Match(SideTextBox.Text).Success=False Then
        MessageBox.Show("Invalid entry")
        Return
    End If
        area.Lengh = SideTextBox.Text
        ResultRichTe...

    Private Sub CloseSquareButton_Click(sender As Object, e As EventArgs) Handles CloseSquareButton.Click
        Me.Close()
    End Sub
    End Class

【讨论】:

你是对的,当然。但是为此使用正则表达式就像使用火箭筒杀死苍蝇一样。有更好的解决方案。 :-) 我同意。我正在编写 RegEx 代码 atm =) 的其中一个案例是我想到的第一件事

以上是关于在哪里添加正则表达式的代码以确保只接受数字[重复]的主要内容,如果未能解决你的问题,请参考以下文章

只接受字符、数字和特殊字符的正则表达式,而不是 [重复]

正则表达式密码验证 - Codewars [重复]

正则表达式 只能出现一次或0次

防止2个连续数字正则表达式

逗号分隔的列表正则表达式 [重复]

正则表达式只接受带小数点和小数点的数字输入