Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   проверка формата даты на JavaScript, помогите простейшим примером (https://javascript.ru/forum/misc/1230-proverka-formata-daty-na-javascript-pomogite-prostejjshim-primerom.html)

tangens 16.05.2008 15:08

проверка формата даты на JavaScript, помогите простейшим примером
 
Подскажите на конкретном примере как реализовать проверку формата даты, например mm/dd/yyyy или mm/dd/yy. Спасибо.

hogart 16.05.2008 16:02

То есть? является ли некая строка датой в данном формате?
проверяйте регулярным выражением
или еще можно как-нить так ппопробовать:
try {
  myDate = new Date(inputStr);
  alert('Это дата')
}
catch(e) {
  alert("Это не дата")
}

tangens 16.05.2008 17:55

Да, нужно чтобы дата могла быть только в таких форматах. Как проверить регулярным выражением?

hogart 19.05.2008 14:09

http://rexv.org/ вам поможет:)

Опишите лучше задачу. Может, вам вовсе и не это надо?

tangens 20.05.2008 12:00

в поле введена дата формата mm/dd/yyyy или mm/dd/yy, по нажатии кнопки нужно проверить соотвествует ли данная строка этим форматам. )

hogart 20.05.2008 12:25

Ну, в протейшем случае --
/\d\d\/\d\d\/\d\d/
-- две цифры, слэш, две цифры, слэш, две цифры.
Но под это выражение подходит и строка "41/56/50" -- что не является датой, так что вам придется вводить дополнительные проверки, или усложнять регулярку.
Так что советую все же сразу проверять путем попытки создания обьекта Date.

tangens 22.05.2008 15:30

try {
  myDate = new Date(inputStr);
  alert('Это дата')
}
catch(e) {
  alert("Это не дата")
}


В данном случае я не попадаю в блок catch(), т.к. myDate принимает значение InvalidDate.

hogart 22.05.2008 15:53

А, вот оно как... прошу прощения.
Ну тогда так:
if ('Invalid Date' == (var myDate = new Date(inputStr))) {
  alert('Это не дата:(');
}
//нормальная обработка...

или самому бросать exception в блоке try:
try {
  myDate = new Date(inputStr);
  if ('Invalid Date' == myDate) {
    throw 'Это не дата';
  }
}
catch(e) {
  alert(e); // эксепшен может быть любым обьектом, в т.ч. и строкой
  return; // выходим из функции
}
finally {
  //обработка нормального хода событий
}

Впрочем, вариант с try-catch, скорее всего, несколько медленнее.

tangens 22.05.2008 16:21

try {
  myDate = new Date(inputStr);
  if ('Invalid Date' == myDate) {
    throw 'This is not date';
  }
  else
  alert('this is date '+inputStr);
}
catch(e) {
  alert(e); 
  return; 
}

Передаю аргументом строку '05/19/200812', получаю 'this is date 05/19/200812'. Наверное так и придется с регулярными выражениями пробовать, пока не понимаю в них ничего... :(

hogart 22.05.2008 16:38

tangens, гм, да...
Но с другой стороны -- двести тыщ восемьсот двенадцатый год -- вполне легальная дата, просто в далеком будущем:)

Тогда в лоб:
var arrDate = inputStr.split('/');
//проверяем arrDate[0] -- должно быть больше 0 и меньше 32
//проверяем arrDate[1] -- должо быть больше 0 и меньше 13
// если arrDate[1] ==  2 (февраль), то
// если arrDate[2] делится на 4, но не равно 0 (вискосный год), то 
// arrDate[0] должно быть меньше 30, в противном случае -- меньше 29.

Ну и плюс проверка, попадает ли год в нужные вам интервалы...

по регекспам:
http://phpclub.ru/detail/article/regexp_1
http://phpclub.ru/detail/article/regexp_2
Там для php, но главное -- синтаксис их самих. Помедитируйте на эти статьи.


Часовой пояс GMT +3, время: 14:08.