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検証を試しましたが、どちらも機能しません。前もって感謝します!

アップデート:

検証は使用したAngularUIdatepickerと競合していると思いましたが、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 に答える