Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.05.2008, 14:08
Новичок на форуме
Отправить личное сообщение для tangens Посмотреть профиль Найти все сообщения от tangens
 
Регистрация: 16.05.2008
Сообщений: 8

проверка формата даты на JavaScript, помогите простейшим примером
Подскажите на конкретном примере как реализовать проверку формата даты, например mm/dd/yyyy или mm/dd/yy. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 16.05.2008, 15:02
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

То есть? является ли некая строка датой в данном формате?
проверяйте регулярным выражением
или еще можно как-нить так ппопробовать:
try {
  myDate = new Date(inputStr);
  alert('Это дата')
}
catch(e) {
  alert("Это не дата")
}
Ответить с цитированием
  #3 (permalink)  
Старый 16.05.2008, 16:55
Новичок на форуме
Отправить личное сообщение для tangens Посмотреть профиль Найти все сообщения от tangens
 
Регистрация: 16.05.2008
Сообщений: 8

Да, нужно чтобы дата могла быть только в таких форматах. Как проверить регулярным выражением?
Ответить с цитированием
  #4 (permalink)  
Старый 19.05.2008, 13:09
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

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

Опишите лучше задачу. Может, вам вовсе и не это надо?
Ответить с цитированием
  #5 (permalink)  
Старый 20.05.2008, 11:00
Новичок на форуме
Отправить личное сообщение для tangens Посмотреть профиль Найти все сообщения от tangens
 
Регистрация: 16.05.2008
Сообщений: 8

в поле введена дата формата mm/dd/yyyy или mm/dd/yy, по нажатии кнопки нужно проверить соотвествует ли данная строка этим форматам. )
Ответить с цитированием
  #6 (permalink)  
Старый 20.05.2008, 11:25
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

Ну, в протейшем случае --
/\d\d\/\d\d\/\d\d/
-- две цифры, слэш, две цифры, слэш, две цифры.
Но под это выражение подходит и строка "41/56/50" -- что не является датой, так что вам придется вводить дополнительные проверки, или усложнять регулярку.
Так что советую все же сразу проверять путем попытки создания обьекта Date.
Ответить с цитированием
  #7 (permalink)  
Старый 22.05.2008, 14:30
Новичок на форуме
Отправить личное сообщение для tangens Посмотреть профиль Найти все сообщения от tangens
 
Регистрация: 16.05.2008
Сообщений: 8

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


В данном случае я не попадаю в блок catch(), т.к. myDate принимает значение InvalidDate.
Ответить с цитированием
  #8 (permalink)  
Старый 22.05.2008, 14:53
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

А, вот оно как... прошу прощения.
Ну тогда так:
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, скорее всего, несколько медленнее.
Ответить с цитированием
  #9 (permalink)  
Старый 22.05.2008, 15:21
Новичок на форуме
Отправить личное сообщение для tangens Посмотреть профиль Найти все сообщения от tangens
 
Регистрация: 16.05.2008
Сообщений: 8

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'. Наверное так и придется с регулярными выражениями пробовать, пока не понимаю в них ничего...
Ответить с цитированием
  #10 (permalink)  
Старый 22.05.2008, 15:38
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

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, но главное -- синтаксис их самих. Помедитируйте на эти статьи.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
генерация чисел и проверка на повтор Javascript jesuspunk Общие вопросы Javascript 7 25.03.2008 14:32