验证十进制数所需的正则表达式

时间:2018-03-17 06:37:00

标签: c# .net regex vb.net visual-studio-2010

有人可以提供允许的正则表达式:

  • 小数点前最多18位数
  • 小数点后的两位数

有效值:18.50,5556.50 无效值:18.555,5879.5877等。

4 个答案:

答案 0 :(得分:1)

我会这样做:

\b\d{1,18}\.\d{1,2}\b
  • \b捕获字边界;如果您将正则表达式括在两个\b之间,则会将搜索限制为单词,即由空格,标点符号等分隔的文本。
  • \d捕获数字
  • \d{1,18}捕获至少1位数字和最多18位数字
  • \.抓住一个点;你必须添加一个反斜杠来逃避点字符,因为它是正则表达式引擎的特殊符号,它用于捕获所有内容
  • \d{1,2}捕获至少1位数字和最多2位数字

现场演示here,以便您可以随意测试。

答案 1 :(得分:0)

要在小数点前最多匹配18位数,您可以使用\d{1,18}。要匹配小数点后的2位数,您可以使用\d{2}

你的正则表达式可能如下:

\b\d{1,18}\.\d{2}\b

那将匹配:

  • \b字边界
  • \d{1,18}匹配数字1-18次
  • \.匹配一个点
  • \d{2}匹配2位数字
  • \b字边界

答案 2 :(得分:0)

对于验证输入,您不需要在正则表达式中使用\b

这会对你有所帮助:

^\d{1,18}\.\d{1,2}$

使用此Demo

enter image description here

答案 3 :(得分:0)

谢谢大家! 我想我刚刚开发了一些比创建正则表达式更简单的东西。这是我做的:

Dim mrp_point As Integer = 0
Dim mrp_decimal_count As Integer = 1
Private Sub txtMRP_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtMRP.KeyPress
    If mrp_decimal_count < 2 Then
        If mrp_point = 0 Then
            e.Handled = Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = "." Or Asc(e.KeyChar) = 8)
            If Not txtMRP.Text = "" Then
                Dim mrp As String = txtMRP.Text
                Dim last As Char = mrp(mrp.Length - 1)
                If last = "." Then
                    mrp_point = 1
                End If
            End If
        ElseIf mrp_point = 1 Then
            e.Handled = Not (Char.IsDigit(e.KeyChar) Or Asc(e.KeyChar) = 8)
            mrp_decimal_count = mrp_decimal_count + 1
        End If
    Else
        e.Handled = Not (e.KeyChar = " " Or Asc(e.KeyChar) = 8)
    End If
End Sub

无论如何,感谢您的时间和帮助! :)