【问题标题】:Regular Expression date time using MVC Data Annotations使用 MVC 数据注释的正则表达式日期时间
【发布时间】:2015-08-18 23:27:19
【问题描述】:

我正在混合 MVC 数据注释和 AngularJs 验证 ng-pattern。 到目前为止我所做的是这样的事情:

[RegularExpression("/^[0-9]{4}-[0-9]{2}-[0-9]{2} 20|21|22|23|([0-1][0-9]):[0-5][0-9]:[0-5][0-9]$/", ErrorMessage = "Date format: yyyy-mm-dd hh:mm:ss")]

如您所见,我尝试格式化日期:yyyy-mm-dd hh:mm:ss。 我想让它24小时。 我的问题是当我输入时表单变得有效:

  • 2015-21 , 2015-22 // 2015-20 无效,不明白为什么
  • 2015-12-20 21 // 我希望用户输入分钟和秒,因为它还有 datetimepicker,它更有用,它可以设置我想要的格式

那么,为什么我的正则表达式没有按预期工作?

【问题讨论】:

    标签: angularjs regex asp.net-mvc validation


    【解决方案1】:

    改变你的正则表达式,而不是像这样

    ^[0-9]{4}-[0-9]{2}-[0-9]{2} ((20|21|22|23)|([0-1][0-9])):[0-5][0-9]:[0-5][0-9]$
    

    检查这个Demo

    我只将您正则表达式中的 20|21|22|23|([0-1][0-9]) 更改为 ((20|21|22|23)|([0-1][0-9]))

    【讨论】:

    • 也谢谢你的回答,我害怕添加parentesis,但是我现在有另一个问题,我在cmets上发布了,希望自己找到解决方案;D
    【解决方案2】:

    您的正则表达式没有按预期工作,因为您没有使用^ 锚(虽然我猜这个表达式是锚定的,但最好还是安全使用)并且您没有将替代方案包含在一个组中,因此212223 是有效值。

    这是一个固定的表达方式:

    ^[0-9]{4}-[0-9]{2}-[0-9]{2} (?:20|21|22|23|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$
                                ^^^                         ^^ 
    

    demo

    【讨论】:

    • 实际上是的,这适用于 AngularJs 验证 (javascript),但 MVC 似乎有不同的语法左右。我的 ModelState.IsValid 在此日期返回 false。我还对数字使用了另一个正则表达式,这很好。或许你知道,这个问题是怎么回事?
    • 我不知道其他正则表达式是什么样的,但我建议的正则表达式应该适用于任何正则表达式引擎,除非它不支持非捕获组。这不是我相信的cae。你的意思是什么日期?
    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 2011-09-19
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多