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

C# 验证十进制数所需的正则表达式,c#,.net,regex,vb.net,visual-studio-2010,C#,.net,Regex,Vb.net,Visual Studio 2010,是否有人可以提供一个正则表达式来允许: 小数点前最多18位 小数点后两位数 有效值:18.505556.50 无效值:18.555579.5877等。我会这样做: \b\d{1,18}\.\d{1,2}\b \b捕获单词边界;如果将正则表达式括在两个\b之间,则将搜索限制为单词,即由空格、标点符号等分隔的文本 \d捕获数字 \d{1,18}捕获至少1个数字,最多18个数字 \。捕获一个点;您必须预先加上反斜杠以转义点字符,因为它是正则表达式引擎的特殊符号,用于捕获所有内容 \d{1,2}

是否有人可以提供一个正则表达式来允许:

  • 小数点前最多18位
  • 小数点后两位数
有效值:18.505556.50 无效值:18.555579.5877等。

我会这样做:

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

现场演示,因此您可以随意测试。

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

您的正则表达式可能会如下所示:

这将符合:

  • \b
    单词边界
  • \d{1,18}
    将数字匹配1-18次
  • \。
    匹配一个点
  • \d{2}
    匹配两位数字
  • \b
    单词边界

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

这将有助于您:

^\d{1,18}\.\d{1,2}$
用这个

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

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
Dim mrp_点为整数=0
Dim mrp\u十进制\u计数为整数=1
私有子txtMRP_KeyPress(ByVal sender作为对象,ByVal e作为System.Windows.Forms.KeyPressEventArgs)处理txtMRP.KeyPress
如果mrp\u十进制计数小于2,则
如果mrp_点=0,则
e、 Handled=Not(Char.IsDigit(e.KeyChar)或e.KeyChar=“.”或Asc(e.KeyChar)=8)
如果不是txtMRP.Text=“”,则
Dim mrp As String=txtMRP.Text
最后一个尺寸为Char=mrp(mrp.Length-1)
如果last=“”则
mrp_点=1
如果结束
如果结束
如果mrp_点=1,则
e、 Handled=Not(Char.IsDigit(e.KeyChar)或Asc(e.KeyChar)=8)
mrp\U十进制计数=mrp\U十进制计数+1
如果结束
其他的
e、 已处理=未处理(e.KeyChar=“”或Asc(e.KeyChar)=8)
如果结束
端接头

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

为链接添加书签。c#的代码生成!谢谢。谢谢您的解释。您是否考虑过使用
Decimal.TryParse
然后检查上界和精度?这将适用于任何用户配置的区域性,并确保在解析它时,您获得相同的值。在这种情况下,正则表达式是非常次优的。ASP.NET范围验证器允许类似的验证客户端:请记住,您所称的小数点
,是荷兰和许多其他国家的千位分隔符,在这些国家,我们使用
来表示分数,
作为千位分隔符。Regex过于固定,无法正确支持国际化。