【问题标题】:Validation still fails for regular expression that only allows numbers仅允许数字的正则表达式的验证仍然失败
【发布时间】:2015-05-24 00:21:50
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您的正则表达式只允许一位数字,您输入 84。使用 ^\d+$ 或 ^[0-9]+$

标签: regex asp.net-mvc validation


【解决方案1】:

您需要锚点和多个数字:

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

【讨论】:

  • 我将正则表达式更改为包含“@(^[0-9]+$)”,但该属性似乎仍然失败。带有消息“无效。只能使用数字”
  • @DeanForant:抱歉,我不知道验证是如何工作的。可能你必须扭转测试[^0-9]?是字符串匹配还是不匹配时出现错误信息?
  • 不是匹配字符串的问题。正则表达式。应该只允许数字,但即使我在 from 字段中输入一个数字,该数字绑定到具有此正则表达式规则的模型中的属性,它也会失败。但是在查看该物业后,它会找到地址的门牌号。我可以向我的项目经理提出一个强有力的理由,即并非所有的街道号码都只是数字。例如榆树街 12 号。或 12B 榆树街。事实上,我曾经住在一个数字(22B)后面有一个字母的地址。如果我可以向我的项目经理证明这一点,那么我们就可以取消这个验证检查。
  • 我尝试提出完全删除验证规则的案例,但街道编号必须是数字(由于正在运行某些算法来确定特定区域(社区)。话虽如此,我把regexpal.com 中的以下正则表达式 (^[0-9]+$) 和数字测试通过而字母没有通过。我仍然很困惑为什么它在 MVC 中对模型属性的数据注释失败。
  • 这是我的属性,我在我的模型类中遇到问题,供任何想查看它的人使用:[DisplayName("Street #")] [RegularExpression("@([0-9] *)", ErrorMessage = "无效。只能使用数字。")] public string StreetNumber { get;放; }
【解决方案2】:

我想通了。结果证明这是一个非常模糊的疏忽。正则表达式的 DataAnnotation 应该在引号前有 @。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 2014-10-19
    • 1970-01-01
    • 2016-10-30
    • 2017-06-17
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多