Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 十进制数字验证的正则表达式_C#_Regex - Fatal编程技术网

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

用于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 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]+