11

我有以下表单代码,允许使用 AngularUI 输入日期(日期是必需的,并且应该与美国日期格式匹配,例如:MM/DD/YY):

<form name="form" ng-submit="createShipment()">
    <!-- Shipment Date must be in MM/DD/YY format: -->  
    <input name="shipmentDate" 
          ng-pattern='/^[0,1]?\d{1}\/(([0-2]?\d{1})|([3][0,1]{1}))\/(([1]{1}[9]{1}[9]{1}\d{1})|([2-9]{1}\d{3}))$/'
          ui-date="{ dateFormat: 'mm/dd/y' }" required ng-model="shipment.ShipmentDate" type="text">
    <span ng-show="form.shipmentDate.$error.required">Date Required!</span>
    <span ng-show="form.shipmentDate.$error.pattern">Incorrect Format, should be MM/DD/YY!</span>

    <input class="btn-primary" ng-hide="!form.$valid" type="submit" value="Create">
</form>

必填字段的验证工作正常,但日期格式未正确验证,并且始终显示“格式不正确...”消息。

我尝试了几种不同的正则表达式,它们在其他地方运行良好,但仍然无法正常工作。我也尝试了 AngularUI 验证,但它也不起作用。提前致谢!

更新:

我认为验证与我使用的 AngularUI datepicker 冲突,但是 datepicker 无论如何都会自动更正日期,所以如果不使用 datepicker,只要正则表达式有效,验证就有效,如果使用 datepicker,则不需要其他验证。

4

3 回答 3

20

您的 ng-pattern 在我创建的小提琴中工作,但它允许一些不正确的日期,例如 0/9/1993 和 19/2/1993。

这是一个更好的模式:(注意,它已更新以匹配@WillSadler 的答案)

^(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/((19\d{2})|([2-9]\d{3}))$

小提琴

于 2013-01-04T03:51:25.613 回答
2

接受的答案对我不起作用。我改为:

^(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/((19\d{2})|([2-9]\d{3}))$

否则只有 1990 年以后出生的人才需要申请!

于 2016-01-26T21:19:27.167 回答
-1

检查闰年验证:日期格式:dd-mm-yyyy

正则表达式模式:^(0?[1-9]|1\d|2[0-8]|29(?=[-]\d?\d[-](?!1[01345789]00|2[1235679]00)\d\d(?:[02468][048]|[13579][26]))|30(?![-]0?2)|31(?=[-]0?[13578]|[-]1[02]))[-](0?[1-9]|1[0-2])[-]([12]\d{3})$

演示

另一个演示

于 2015-06-23T20:14:15.927 回答