2009-03-08 8 views
4

私はテキスト文字列を処理する前の日付として検証しようとしていますが、私が試した正規表現の両方が構文エラーを投げているのですが、なぜそれが見えません。私が知ることから、どちらも間違っていることはありません。これらは文字列です:なぜこれらのJavaScriptの正規表現は構文エラーを投げるのですか?

var datePattern1 = new RegExp((0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-](19|20)\d\d); 

var datePattern2 = new RegExp([0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}); 

は、任意の助けに感謝します。

答えて

12

あなたはあなたの表現の前後に引用符が欠落しています

var datePattern1 = new RegExp("(0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-](19|20)\d\d"); 
var datePattern2 = new RegExp("[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}"); 
+0

これは本当に簡単ですか? doh – MalcomTucker

+0

いいえ、そう簡単ではありません。最後の\ d \ dも\\ d \\ dでなければなりません。 – Guffa

9

ダーリンが述べたようにRegExpコンストラクタに文字列を渡すか、正規表現の構文を使用し、「/ … /」のいずれか:

var datePattern1 = /(0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-](19|20)\d\d/; 
var datePattern2 = /[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}/; 
3

ザ・正規表現( )コンストラクタは文字列を受け取るため、正規表現を引用する必要があります。

var datePattern2 = new RegExp('[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}'); 

二重引用符を使用する場合は、正規表現内のバックスラッシュエスケープに注意してください。代わりに、Perl構文を使用することもできます。

var datePattern2 = /[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}/; 
+0

もしperl構文を使うなら、varを正規表現のコンストラクタに渡しますか? – MalcomTucker

+0

いいえ。スラッシュの構文は「正規表現リテラル」です。その周囲にRegexオブジェクトを作成する必要はありません。 –

関連する問題