2017-09-21 13 views
1

角2の検証パターンが他の言語の検証パターンと異なる可能性があるので、ここで質問します。日付検証パターンが角2の検証パターンで機能しない

mm/dd/yyyyを取得するためのasp.net検証に使用した日付パターンがあります。これは閏年などを考慮し、m/d/yyyyも受け入れます。それは次のように使用されています。

dateSubmitted: [null, [Validators.required, Validators.pattern('((^(10|12|0?[13578])([/])(3[01]|[12][0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(11|0?[469])([/])(30|[12][0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(0?2)([/])(2[0-8]|1[0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(0?2)([/])(29)([/])([2468][048]00)$)|(^(0?2)([/])(29)([/])([3579][26]00)$)|(^(0?2)([/])(29)([/])([1][89][0][48])$)|(^(0?2)([/])(29)([/])([2-9][0-9][0][48])$)|(^(0?2)([/])(29)([/])([1][89][2468][048])$)|(^(0?2)([/])(29)([/])([2-9][0-9][2468][048])$)|(^(0?2)([/])(29)([/])([1][89][13579][26])$)|(^(0?2)([/])(29)([/])([2-9][0-9][13579][26])$))')]], 

は、このパターンは、私のasp.netアプリで完全に働いたが、それは私がしようとすると、入力ボックスに正しい日付形式を入力するか、それを入力するための材料の日付ピッカーを使用するかどうか、それは失敗し、Angular2ではありません。私はこれについて何かを見つけることができませんでした。私は電子メールのようにAngular2で他のパターンをうまく適用してきました。次のようにこの情報が必要な場合は、私のpackage.jsonで

私の角度のバージョンは、以下のとおりです。

"@angular/animations": "^4.3.6", 
    "@angular/cdk": "^2.0.0-beta.10", 
    "@angular/common": "^4.1.0", 
    "@angular/compiler": "^4.1.0", 
    "@angular/core": "^4.1.0", 
    "@angular/forms": "^4.1.0", 
    "@angular/http": "^4.1.0", 
    "@angular/material": "^2.0.0-beta.10", 
    "@angular/platform-browser": "^4.1.0", 
    "@angular/platform-browser-dynamic": "^4.1.0", 
    "@angular/router": "^4.1.0", 
    "@ngrx/core": "^1.2.0", 

編集:追加plunker:https://plnkr.co/edit/qHPZceVTpS4x1AEqZfjA

+0

パターン内のすべての '' \ ''を二重にします。 –

+0

それはうまくいきませんでした。他のキャラクターも私は脱出しなければなりませんか? – David

+0

[ここから](https://regex101.com/r/RUPheX/1)をコピー/ペーストしてみてください(私はそこで '\ d'を二重にエスケープしました。 –

答えて

1

あなたは正しくによりコンパイルされていない使用されているパターン〜\dは、正規表現エスケープシーケンスではなく、文字列エスケープシーケンスとして扱われます。これを達成するには、バックスラッシュを2倍にする必要があります。

さらに、あなたの選択肢はすべて^$のアンカーで囲まれています。正しいのですが、それはかなり効率的ではありません。最初に^を1つ置き、パターンの最後に$を1つ入れて、キャプチャしていないグループ内の選択肢をラップしてください。

また、あなたには、いくつかのより多くのパフォーマンスを獲得し、/シンボルがRegExpコンストラクタ内部でエスケープする必要がないので単なる/[/]を交換する((?:...)にすなわち(...))非キャプチャしたものに、すべてのcaqpturingグループを変換することができます。

だから、あなたは

dateSubmitted: [null, [Validators.required, Validators.pattern('^(?:(?:10|12|0?[13578])/(?:3[01]|[12][0-9]|0?[1-9])/(?:1[8-9]\\d{2}|[2-9]\\d{3})|(?:11|0?[469])/(?:30|[12][0-9]|0?[1-9])/(?:1[8-9]\\d{2}|[2-9]\\d{3})|0?2/(?:2[0-8]|1[0-9]|0?[1-9])/(?:1[8-9]\\d{2}|[2-9]\\d{3})|0?2/29/[2468][048]00|0?2/29/[3579][26]00|0?2/29/[1][89][0][48]|0?2/29/[2-9][0-9][0][48]|0?2/29/1[89][2468][048]|0?2/29/[2-9][0-9][2468][048]|0?2/29/1[89][13579][26]|0?2/29/[2-9][0-9][13579][26])$')]], 

を使用することができupdated Plunkrを参照してください。

+0

私の問題であなたの時間と忍耐をありがとうございます。私は本当にそれを感謝します。 – David

+0

不要な非キャプチャグループを削除するのを忘れました。 –

+0

あなたは正規表現の忍者です。 – David

関連する問題