十进制正则表达式取负值

时间:2016-09-12 18:30:37

标签: regex asp.net-mvc c#-4.0 data-annotations

我有一个属性Year01。我装饰相同只取十进制数。但它一旦获得-15(减去十五)的价值就会中断 如何纠正这个?

[RegularExpression(@"^\s*?([\d\,]+(\.\d+)?|\.\d+)\s*$", ErrorMessage = "Only decimal numbers are allowed")]
public string YEAR01 { get; set; }

感谢。

1 个答案:

答案 0 :(得分:0)

让我们来看看你正在使用的正则表达式:

^\s*?([\d\,]+(\.\d+)?|\.\d+)\s*$

第一个符号是^,代表一行的开头。 \s是空格符号,*表示此符号可以多次出现,?符号代表0 or greater个空格出现次数。所以这组符号只是在行开头处切掉了空白。

类似的序列可以在正则表达式的末尾找到,它没有?符号,我认为可以将其复制到正则表达式的左侧,而$代表换行。

在这个空间切割结构之间,您可以找到数字字符串的主要检查,该字符串表示该数字可以包含任何数字序列和千位分隔符([\d\,]+表示我们正在搜索{one or greater 1}}带有跟踪千位分隔符的数字的出现次数)之后我们可以或者找不到它后面的小数分隔符和数字。

因此,您想要做的更改非常简单,您只需在主符号组的开头添加带问号的-符号检查,如下所示:

^\s*?(-?[\d\,]+(\.\d+)?|\.\d+)\s*$

您可以找到更多有用的正则表达式样本here