对于仅允许数字的正则表达式,验证仍然失败

时间:2015-03-20 14:38:31

标签: regex asp.net-mvc validation

我正在使用启用了数据注释的MVC。在我的ViewModel中,我有一个包含正则表达式验证规则的属性,只允许数字

[RegularExpression("@([0-9])", ErrorMessage = "Invalid. Must use only numbers.")]

当我提交表单时,ModelState.IsValid返回false。当我在控制器中的ModelState上添加断点时,我看到我用正则表达式数据注释修饰的ViewModel的StreetNumber属性失败了(即使我在表单字段中输入了数字84)。

有没有人知道为什么这仍然会失败。 (我已经证实这个属性是唯一一个错误地失败的属性)。

2 个答案:

答案 0 :(得分:1)

你需要锚点和多个数字:

[RegularExpression("@(^[0-9]+$)", ErrorMessage = "Invalid. Must use only numbers.")]
//           here  ___^     ^^

答案 1 :(得分:1)

我明白了。事实证明这是一个非常模糊的疏忽。正则表达式的DataAnnotation应该在引号前面有@。

而不是: [RegularExpression("@(^[0-9]+$)", ErrorMessage = "Invalid. Must use only numbers.")]

我需要这个: [RegularExpression(@"(^[0-9]+$)", ErrorMessage = "Invalid. Must use only numbers.")]

我真的需要一个更大的咖啡杯:)