【问题标题】:decimal regular expression to take negative values十进制正则表达式取负值
【发布时间】:2016-09-12 18:30:37
【问题描述】:

我有一个属性为Year01。我已经装饰了相同的只取十进制数字。但一旦获得-15(减十五)的价值,它就会崩溃。
如何解决这个问题?

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

谢谢。

【问题讨论】:

  • 如果您使用string 类型来存储十进制值,为什么要使用它?使用decimal 类型有什么问题?
  • 我无法使用它...我正在修复其他人的代码...我不知道他为什么要使用字符串...我的脑海中也出现了为什么不使用十进制而不是字符串?

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


【解决方案1】:

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

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

第一个符号是^,代表一行的开始。 \s 是一个空格符号,* 表示这个符号可以出现多次,? 符号代表一个0 or greater 空格出现。所以这组符号只是简单地去掉了行首的空格。

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

在这种空间切割结构之间,您可能会发现主要检查数字字符串,这表示数字可以包含任何数字序列和千位分隔符([\d\,]+ 表示我们正在搜索 one or greater 数字尾随千位分隔符的数字的出现次数),之后我们可以或找不到小数分隔符和后面的数字。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多