2016-11-29 1 views
0

次の正規表現テストでは、nn/nnnnという形式の日付を探しており、01-12/20nnまたは01 -12/19nn - つまり、1ヶ月に続いて大まかな意味がある年。私が持っているものJavaScript、RegExpオブジェクトはChrome、Firefoxでは動作していますがIE 11では使用できません(正規表現の構文エラー)

はChromeとFirefoxの上で正常に動作しますが、失敗したエラーSyntax error in regular expressionとIE 11

正規表現もwww.regex101.comのテストを合格にし、そこに期待通りに実行したときに、この/^([0-1][0-9][\/]([1][9]|[2][0])[0-9][0-9])$/です。

私は以下の完全な例を含めました。正規表現が絶対に正しいと確信しているので、私はちょっと立ち往生しています。

何か助けていただければ幸いです。何が間違っていますか?

<!DOCTYPE html> 
<html lang="en"> 
    <head> 

    <title>This is the title</title> 

    <script type="text/javascript"> 

     var pattern = new RegExp(/^([0-1][0-9][\/]([1][9]|[2][0])[0-9][0-9])$/, 'i'); 

     var goodInput = "12/2012"; 
     var badInput = "1b/g212"; 

     if(!pattern.test(goodInput)) 
     { 
      console.log("Good Input was NOT OK"); 
     } 
     else 
     { 
      console.log("Good Input was OK"); 
     } 

     if(!pattern.test(badInput)) 
     { 
      console.log("Bad Input was NOT OK"); 
     } 
     else 
     { 
      console.log("Bad Input was OK"); 
     } 

    </script> 

    </head> 

    <body> 

    This is the body 

    </body> 
</html> 
+0

文字列を持たないときに 'new RegExp'の必要はありません。 (0)[0-9] [\ /]([1] [9] | [2] [0])[0-9] [0-9])$/i ; ' – epascarello

答えて

2

既存の正規表現からnew RegExpを作成しています。これは、IE11ではサポートされていないES6機能です。詳細はthis blog postを参照してください。この使用方法のブラウザ互換性の詳細はhereです。それはthe specに記載されています。 patternIsRegexpケースに注意してください。

次のいずれかが動作します:

var pattern = /^([0-1][0-9][\/]([1][9]|[2][0])[0-9][0-9])$/i; 

または

var pattern = new RegExp("^([0-1][0-9][/]([1][9]|[2][0])[0-9][0-9])$", "i"); 

ところで、なぜあなたは[1]代わりの1を書いていますか? \/ではなく、なぜ[\/]と書いていますか?

関連する問題