有人可以提供允许的正则表达式:
有效值:18.50,5556.50 无效值:18.555,5879.5877等。
答案 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}
匹配数字1-18次\.
匹配一个点\d{2}
匹配2位数字\b
字边界答案 2 :(得分:0)
答案 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
无论如何,感谢您的时间和帮助! :)