2009-03-08 9 views
4

J'essaye de valider une chaîne de texte comme date avant de la traiter, cependant les deux regex que j'ai essayés lancent des erreurs de syntaxe et je ne vois pas pourquoi. D'après ce que je peux dire, il n'y a rien de mal non plus. Ce sont les cordes:Pourquoi ces erreurs de syntaxe javascript regex?

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

et

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

apprécierais toute aide.

Répondre

12

Il vous manque les guillemets autour de vos expressions:

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

est-ce vraiment aussi simple que cela? doh – MalcomTucker

+0

Non, ce n'est pas si simple. Aussi le \ d \ d à la fin doit être \\ d \\ d. – Guffa

9

Soit passer une chaîne au constructeur RegExp comme Darin mentionné ou utilisez la syntaxe 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

Le Regexp (Le constructeur attend une chaîne, donc vous devez citer votre regex:

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

Lorsque vous utilisez des guillemets doubles, faites attention aux échappements d'antislash dans l'expression régulière. Alternativement, vous pouvez utiliser la syntaxe Perl:

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

si vous utilisez la syntaxe perl passez-vous ensuite la var au constructeur regex? – MalcomTucker

+0

Non. La syntaxe slash est un "littéral regex". Pas besoin de créer un objet Regex autour d'elle. –

Questions connexes