IP地址文本框,仅允许一位小数

时间:2019-04-09 15:31:12

标签: regex vb.net

下面是我的代码,但我遇到一个问题,当您将小数点移到ip的下一个八位字节时,您将不能再放置一个小数点,因此除了放置10.10.10.10之外,您只能执行10.10,这没有实现。 t允许您再输入一个小数继续。它确实可以在您不能输入任何字母的情况下工作,但我不能让它允许多个小数。

    Private Sub Ip_TextChanged(sender As Object, e As TextChangedEventArgs) Handles _ip.TextChanged
        If sender.Text <> String.Empty Then
            Dim TypedNumber As String = sender.Text
            Dim NumberRegex As String = "^[0-9]*\.?[0-9]*$"
            If Not System.Text.RegularExpressions.Regex.Match(TypedNumber, NumberRegex).Success Then
                sender.Text = sender.Text.Remove(sender.Text.Length - 1, 1)
                sender.SelectionStart = sender.Text.Length
            End If
        End If
    End Sub

感谢您的帮助! 谢谢, Kyvex。

1 个答案:

答案 0 :(得分:2)

问号是限定“零个或多个”的点,而不是八角形,因此我认为必须允许多个点连续才能被允许。要修复该部分,您需要将十进制标识符与分组。得到更像这样的东西:

^([0-9]*\.)?[0-9]*$

话虽这么说,对于IP地址模式而言,它可能仍然有点太灵活,因为您允许在八进制数中使用任意数量的十进制数,因此要支持IP地址模式及其最终实现的各种迭代,我认为您可能想要这样的模式:

^([0-9]{1,3}\.){0,3}[0-9]{0,3}$

注意:仍然允许某些无效的八进制值(例如999),但我认为它至少可以允许用户逐个键输入值。

为了提供一些编辑意见(不了解您的情况,请耐心等待),我建议您考虑一下这种方法的用户体验。作为用户,如果入口控件的行为不像正常预期的那样令人沮丧,并且有时在某些指导下显示验证错误而不是限制标准控件的正常行为,其侵入性可能较小。很难预测什么行为对于用户是“正常的”,并且如果您的控件由于他们以非常规的方式进行操作而阻止他们到达有效的终点,则可能会导致沮丧。

ETA:我已经对第二种模式进行了编辑,以回应评论(很好!),但是我也想指出一点,我认为这说明了更广泛的观点。我修改后的模式可能仍然存在一些无意的问题,但更广泛的一点是,不仅要使模式正确运行以达到所需的最终结果,而且要用于达到目标的各种迭代将很困难。最终结果。