Как определить, является ли строка форматом даты? - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть несколько таких строк: 2012-02-05T07:42:47.000Z, смешанных с другими строками.В этом формате всегда .(но цифры не совпадают, конечно ... времена разные) (не Sun, 05 Feb 2012 07:42:47 GMT)

Я хочу знать, соответствует ли строка этому формату.Как я могу это определить?Это так сложно с двоеточиями, точками и прочим.

Ответы [ 6 ]

2 голосов
/ 08 февраля 2012

Regex [0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}Z

0 голосов
/ 13 января 2014

Что бы это ни стоило, вы можете использовать moment.js , чтобы сделать это.

var check1 = "2012-02-05T07:42:47.000Z";
alert(moment(check1));
//Sat Feb 04 2012 23:42:47 GMT-0800

var check2 = "201-02-05T07:42:47.000Z";
alert(moment(check2));
//Invalid date

Поиграйте с этим здесь: http://jsfiddle.net/remus/KFjZF/

0 голосов
/ 13 января 2014

Замените все числа знаком #, чтобы "2012-02-05T07: 42: 47.000Z" выглядело как "#### - ## - ## T ##: ##: ##. ### Z ", то вы можете сделать прямой поиск строки.

Я использовал эту технику, чтобы найти номера социального страхования в большом блоке текста документа, я преобразовал все числа в знаки #, которые мне просто нужны были для поиска строк, которые ### - ## - ####

0 голосов
/ 08 февраля 2012

Вы можете использовать Date.parse (your_string) и проверить результат.Это проверит любой допустимый формат даты, в отличие от регулярных выражений.http://www.w3schools.com/jsref/jsref_parse.asp

Только что понял, что ваша строка всегда в заданном формате, но в отличие от регулярных выражений, эта функция будет проверять правильность дня / месяца / года и т. Д. Так что, возможно, проведите 2 проверки: 1-й для проверки формата строки, 2-й для проверки, еслицифры верны.

0 голосов
/ 08 февраля 2012

Попробуйте сопоставить следующее регулярное выражение:

var pattern = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/;
var d = "2012-02-05T07:42:47.000Z";
if(d.match(pattern) !== null){
    //success
} else {
    //failed
}
0 голосов
/ 08 февраля 2012

Те, для которых !isNaN(+new Date(s))?

...