我正在使用启用了数据注释的MVC。在我的ViewModel中,我有一个包含正则表达式验证规则的属性,只允许数字
[RegularExpression("@([0-9])", ErrorMessage = "Invalid. Must use only numbers.")]
当我提交表单时,ModelState.IsValid返回false。当我在控制器中的ModelState上添加断点时,我看到我用正则表达式数据注释修饰的ViewModel的StreetNumber属性失败了(即使我在表单字段中输入了数字84)。
有没有人知道为什么这仍然会失败。 (我已经证实这个属性是唯一一个错误地失败的属性)。
答案 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.")]
我真的需要一个更大的咖啡杯:)