C#数据注释的正则表达式,用于验证具有以下条件的可选十进制数
示例:
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]*|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; }
答案 0 :(得分:0)
用于验证可能的浮点数的IMHO正则表达式是非常低效的,因为您正在调用比作业所需的大得多的解析器。
最好使用Convert
类并使用方法ToDecimal
或ToDouble
抛出FormatException
例外
答案 1 :(得分:0)
您可以使用此模式:
\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
代码示例:
string text = "1.1231231";
string pat = @"
\A # start of the string anchor
0* # ignored leading zeros
(?:
[1-9][0-9]{0,10} # integer numbers
|
(?![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
";
Regex r = new Regex(pat, RegexOptions.IgnorePatternWhitespace);
Match m = r.Match(text);
if (m.Success) {
/* OK */
} else {
/* FAIL */
}
使用数据注释:
[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!")]
答案 2 :(得分:0)
这应该匹配所有内容,但最大长度
0*[1-9]+[0-9]*(?:[.][\d]+)?|0+[.][\d]+