日期不适用于IE9的Angular ng-pattern

时间:2014-04-08 19:08:54

标签: javascript regex angularjs angularjs-directive ng-pattern

我试图在视图中使用ng-pattern来使用低于日期(mm / dd / yyyy)的验证模式。

 ng-pattern="/^(\d{4})-(\d{2})-(\d{2})$/"

一旦我开始输入日期,验证错误就会出现,并且在有效日期(例如10/15/1988)之后仍然存在

我尝试使用var传递它通过控制器(如下所示)但行为相同:

在控制器中:

  $scope.myPattern = "/^(\d{4})-(\d{2})-(\d{2})$/";

在视图中:

  ng-pattern="{{myPattern}}"

注意:这两种方法都不适用于IE9

4 个答案:

答案 0 :(得分:5)

怎么样:

 /^((\d{4})-(\d{2})-(\d{2})|(\d{2})\/(\d{2})\/(\d{4}))$/

这适用于dd / mm / yyyy和yyyy-mm-dd

/^((\d{4})-(\d{2})-(\d{2})|(\d{2})\/(\d{2})\/(\d{4}))$/.test('04/04/1974')
true
/^((\d{4})-(\d{2})-(\d{2})|(\d{2})\/(\d{2})\/(\d{4}))$/.test('1974-04-04')
true

答案 1 :(得分:4)

您的正则表达式模式应为ng-pattern="/^(\d{2})\/(\d{2})\/(\d{4})$/"。这将匹配看起来像mm/dd/yyyy

的日期

答案 2 :(得分:0)

我发现问题的解决方案类似。 regex bellow接受格式为dd / mm / yyyy的任何日期,年份范围从1990年到2020年。

<input name="birthDate"
            ng-pattern='/^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[012])\/(19\d\d|20[12]\d)$/' ng-model="newUser.birthDate" type="text">

答案 3 :(得分:0)

这是因为您没有以正确的Angular方式将ng-pattern绑定到控制器中的变量;)

而不是:   $ scope.myPattern =“/ ^(\ d {4}) - (\ d {2}) - (\ d {2})$ /”;

应该是: $ scope.myPattern = new RegExp(/ ^(\ d {4}) - (\ d {2}) - (\ d {2})$ /);