C# 十进制数字验证的正则表达式
用于C#数据批注的正则表达式,用于验证具有以下条件的可选十进制数C# 十进制数字验证的正则表达式,c#,regex,C#,Regex,用于C#数据批注的正则表达式,用于验证具有以下条件的可选十进制数 以0-9之间的任何数字开头的最多11位数字(前导零后计数应为11) 最多11位,小数点从0-9之间的任意数字开始,用 小数点不应超过11 它不可能只是一个零 整数中只允许有一个小数,但不需要小数 示例: 12345678910 10.3 0.02 18.2578 012345678.9 0.123456789 012345678912 (since lead zero doesn't count as a valid nu
- 以0-9之间的任何数字开头的最多11位数字(前导零后计数应为11)
- 最多11位,小数点从0-9之间的任意数字开始,用 小数点不应超过11
- 它不可能只是一个零
- 整数中只允许有一个小数,但不需要小数
12345678910
10.3
0.02
18.2578
012345678.9
0.123456789
012345678912 (since lead zero doesn't count as a valid number count
of max 11 is after zeor)
0.123456789 (since this number has decimal lead zero counts to the
total 11 digit count)
0.001
到目前为止,我已经提出了类似的^(?=.{1,11}$)([1-9][0-9]*.\124; 0)(\\.[0-9]*[1-9])?$
,但这并不适用于所有情况
这就是我设置数据注释的方式
[RegularExpression(@"(?<![.\d])0*(?:[1-9][0-9]{10}|(?![0-9.]{14})(?:0\.[0-9]*[1-9][0-9]*|[1-9][0-9]*\.[0-9]+))(?![0-9.])\z", ErrorMessage = "Invalid {0}")]
public decimal Quantity { get; set; }
[RegularExpression(@)(?IMHO用于验证可能的浮点数的正则表达式效率非常低,因为您调用的解析器比作业所需的要大得多
最好使用Convert
类并使用方法ToDecimal
或ToDouble
抛出FormatException
exception您可以使用以下模式:
\A0*(?:[1-9][0-9]{0,10}|(?![0-9.]{12})(?:0\.[0-9]*[1-9][0-9]*|[1-9][0-9]*\.[0-9]+))\z
详情:
\A # start of the string anchor
0* # ignored leading zeros
(?:
[1-9][0-9]{0,10} # integer
|
(?![0-9.]{12}) # 11 characters max for decimal numbers
(?:
0\.[0-9]*[1-9][0-9]* # decimal numbers < 1
|
[1-9][0-9]*\.[0-9]+ # decimal numbers >= 1
)
)
\z # end of the string anchor
这应该匹配所有内容,但最大长度除外
0*[1-9]+[0-9]*(?:[.][\d]+)?|0+[.][\d]+
012345678.9
?它是否有效匹配?1234567890
是否有效匹配?@Braj是012345678.9和.1234567890是有效匹配,因为它们仍然不超过计数11(带小数点)?12.34.56789
?Braj整数只允许有一个小数点,但不需要小数点。我们不知道什么是小数点在strtod
,strtold
和strtof
这里。请注意,我们正在谈论的是c#。呜呜!我今天很古怪,但是长度检查如何?如果存在小数点呢?在c#中执行所有这些操作?您的模式说10.3是无效的,它是有效的decimal@HaBo:10.3
运行良好,您犯了一个错误。我将添加一个在线演示。(用lookaround代替锚点以获得多个结果)所以所有蓝色和绿色都被传递?@HaBo:是的,所有高亮显示的子字符串。我在C#数据注释中使用它,我将其设置为(?)?
[RegularExpression(@"^(?:[1-9][0-9]{0,10}|(?![0-9.]{12})(?:0\.[0-9]*[1-9][0-9]*|[1-9][0-9]*\.[0-9]+))$",
ErrorMessage="Invalid number!")]
0*[1-9]+[0-9]*(?:[.][\d]+)?|0+[.][\d]+