Подтвердить что ты не робот

AngularJS: Как подтвердить дату в формате США?

У меня есть следующий код формы, который позволяет вводить дату с использованием 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, и он тоже не работает. Спасибо заранее!

UPDATE:

Я полагал, что валидация противоречит используемому мне datepicker AngularUI, но datepicker автоматически фиксирует дату, так что если datepicker не используется, то проверка работает до тех пор, пока работает регулярное выражение, и если используется datepicker, нет необходимости в другая проверка.

4b9b3361

Ответ 1

Принятый ответ не работает для меня. Я изменил на:

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

В противном случае нужны только люди, родившиеся после 1990 года!

Ответ 2

Ваш ng-шаблон работал в скрипке, которую я создал, но он позволяет использовать некоторые неправильные даты, такие как 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}))$

Fiddle.

Ответ 3

Проверить с подтверждением високосного года: Формат даты: 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})$

Демо

другое демо