2013-12-20 2 views
1

Я не могу решить проблему с регулярным выражением, любыми идеями?Regexp test Ошибка YYYY-MM-DD

var pattern = new RegExp("/(19|20)\d\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])/") 
// regexp for test date format like YYYY-MM-DD, 
data = "2013-12-20"; // Date 
console.log(pattern.test(data)); //returns false 

Извините за глупый вопрос, но я новичок в регулярном выражении.

ответ

5

Вы используете как new RegExp(...) и буквального /pattern/ синтаксис, либо падение / сек или new RegExp, и он будет работать. В настоящее время вы также тестируете / в начале и конце строки String.


Просто испытано, если вы пишете как буквальное (падение new RegExp и цитаты), это работает. Отбрасывание косой черты не работает, потому что вы не избежали обратных косых черт, поэтому они фактически не находятся в строке String после ее интерпретации.

Пример каждого используя советы выше:

var using_constructor = new RegExp('^(?:19|20)\\d\\d-(?:0[1-9]|1[012])-(?:0[1-9]|[12][0-9]|3[01])$'); 
var using_literal = /^(?:19|20)\d\d-(?:0[1-9]|1[012])-(?:0[1-9]|[12][0-9]|3[01])$/; 
+0

Он не работал ... но спасибо –

+0

@IgorPatychenko см редактирования. –

+0

С помощью конструктора RegExp вам нужно будет сбежать от слэшей. \ - это спуск в цепочках JS и в RegExp, поэтому для того, чтобы все это дошло до механизма RegExp, вы должны использовать \\. Или используйте литерал RegExp, и вам не нужно это учитывать. @PaulS. не стесняйтесь добавить это к своему ответу. – JAAulde

1

Попробуйте это:

var pattern = /(19|20)\d\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])/ // regexp for test date format like YYYY-MM-DD, 
data = "2013-12-20"; // Date 
console.log(pattern.test(data)); //returns true 
+0

Две заметки, квадратные скобки вокруг дефиса не нужны, и на основе примера OPs ни один из скобок вложенных подзамок не требует захвата, поэтому вы можете добавить '?:' Непосредственно внутри открытого парота. – JAAulde