Javascript.RU

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

regexp формат даты
нужно проверить соответсвие строки формату даты.
формат даты - одна или две буквы d(день), одна или две m(месяц), две или четыре буквы y(год). порядок не важен. день, месяц и год разделены одинаковыми разделителями.
пример, 'dd-mm-yyyy', 'd/m/yy', 'yy.mm.dd'. не должно подходить 'd-d-yy', 'yyyy-mm-m'
на данный момент есть такой код
'dd-mm-yyyy'.match(/^(d{1,2}|m{1,2}|y{4}|y{2})([^a-zA-Z0-9]+)(d{1,2}|m{1,2}|y{4}|y{2})\2(d{1,2}|m{1,2}|y{4}|y{2})$/)

самый главный вопрос, можно ли проверить, чтобы нельзя было повторить день, месяц или год (например так 'd-d-yy')
и можно ли заменить y{4}|y{2} одним выражением (y{2,4} не подходит)
Ответить с цитированием
  #2 (permalink)  
Старый 16.01.2012, 15:09
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от eca
формат даты - одна или две буквы d(день), одна или две m(месяц), две или четыре буквы y(год). порядок не важен. день, месяц и год разделены одинаковыми разделителями.
10-11-12
01/02/03
Что это за даты, согласно вашего алгоритма?
Ответить с цитированием
  #3 (permalink)  
Старый 16.01.2012, 15:20
eca eca вне форума
Новичок на форуме
Отправить личное сообщение для eca Посмотреть профиль Найти все сообщения от eca
 
Регистрация: 02.12.2011
Сообщений: 4

Сообщение от Gvozd
10-11-12
01/02/03
Что это за даты, согласно вашего алгоритма?
что это за дата зависит от формата, если формат например 'dd-mm-yy', то это 10 ноября 2012г
Ответить с цитированием
  #4 (permalink)  
Старый 16.01.2012, 16:45
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Мне кажется регой дату не проверить. Придется разбирать по частям. И проверять по числам. Например: 29.02.2012
1. бьем по точкам (в данном случае)
2. проверяем год >= 1900 <= 2200 (для примера)
3. месяц >= 1 <=12 (в зависимости от года 29 фев.)
4. день в зависимости от месяца

Или попробовать мухлевать с объектом Date, в частности с Date.parse.
Или (не знаю, насколько правильно это рассуждение), действовать (через ж) так:
var w = "12.12.2012".split(".");
var x = new Date();
x.setFullYear(w[2]);
x.setMonth(w[1]);
x.setDate(w[0]);

//затем получать дату
if (x.getDate() + ".(Ваш разделитель)" + x.getMonth() + "." + x.FullYear() == w.join("."));

но получается какой-то велосипед.) Писал прям форум, ес че звиняйте ^_^
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 16.01.2012 в 17:00.
Ответить с цитированием
  #5 (permalink)  
Старый 16.01.2012, 17:12
eca eca вне форума
Новичок на форуме
Отправить личное сообщение для eca Посмотреть профиль Найти все сообщения от eca
 
Регистрация: 02.12.2011
Сообщений: 4

Сообщение от nerv_
Мне кажется регой дату не проверить. Придется разбирать по частям. И проверять по числам. Например: 29.02.2012
1. бьем по точкам (в данном случае)
2. проверяем год >= 1900 <= 2200 (для примера)
3. месяц >= 1 <=12 (в зависимости от года 29 фев.)
4. день в зависимости от месяца

Или попробовать мухлевать с объектом Date, в частности с Date.parse.
Или (не знаю, насколько правильно это рассуждение), действовать (через ж) так:
1 var w = "12.12.2012".split(".");
2 var x = new Date();
3 x.setFullYear(w[2]);
4 x.setMonth(w[1]);
5 x.setDate(w[0]);
6
7 //затем получать дату
8 if (x.getDate() + ".(Ваш разделитель)" + x.getMonth() + "." + x.FullYear() == w.join("."));

но получается какой-то велосипед.) Писал прям форум, ес че звиняйте ^_^

вы видимо не правильно поняли вопрос. мне нужно проверить соответствие строки именно формату даты, а не самой дате.

Сообщение от eca
нужно проверить соответсвие строки формату даты.
формат даты - одна или две буквы d(день), одна или две m(месяц), две или четыре буквы y(год). порядок не важен. день, месяц и год разделены одинаковыми разделителями.

например, в плагине календаря есть настройка, принимающая этот формат, т.е. сначала задаётся формат даты, а затем даты на сайте выводятся в соответствии с этим форматом. в настройках задаём формат 'yyyy-mm-dd', на сайте даты будут выводится в соответствии с этим форматом, т.е. '2012-01-16'.
Ответить с цитированием
  #6 (permalink)  
Старый 18.01.2012, 14:43
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от eca
вы видимо не правильно поняли вопрос. мне нужно проверить соответствие строки именно формату даты, а не самой дате.
А как Вы проверите соответствие даты формату, не проверив саму дату?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #7 (permalink)  
Старый 18.01.2012, 15:13
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

nerv_,
перечитывать первый пост до просветления.
особое внимание уделить коду.
Сообщение от eca
можно ли проверить, чтобы нельзя было повторить день, месяц или год (например так 'd-d-yy')
в рамках регулярных выражений - я не вижу способа.
ну, кроме перечислить все варианты размещения блоков относительно друг друга(6 штук)
Сообщение от eca
и можно ли заменить y{4}|y{2} одним выражением (y{2,4} не подходит)
ну, только если так(но вам не это наверно хотелось увидеть):
yy(y{2})?
Ответить с цитированием
  #8 (permalink)  
Старый 18.01.2012, 15:47
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Gvozd
перечитывать первый пост до просветления.
Зачем?
Сообщение от Gvozd
в рамках регулярных выражений - я не вижу способа.
Сообщение от nerv_
Мне кажется регой дату не проверить.
Сообщение от eca
проверить, чтобы нельзя было повторить день, месяц или год (например так 'd-d-yy')
Чтобы это проверить, надо научить программу понимать, где месяц, где день, а где год. И как вы собираетесь проверить "формат", не проверив саму дату на правильность? Впрочем, если речь не идет о валидности даты, можно тупо в лоб проверять, например, так: две_цифры; разделитель; две_цифры; разделитель; четыре цифры. В таком случае не вижу смысла вообще проверять "формат" даты.
Тогда уж говорите не о проверке формата, а о валидности даты. Ибо, если она не валидна (а просто набор цифр), какая разница какой у них "формат"?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 18.01.2012 в 15:50.
Ответить с цитированием
  #9 (permalink)  
Старый 18.01.2012, 16:19
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от nerv_
Зачем?
чтобы понять чего хочет хочет ТС, и не задавать глупых вопросов не имеющих к его задаче никакого отношения?
Мы же тут не на свободную тему общаемся, а все-таки вполне конкретную задачу решаем?

eca,
Вот так, в лоб можно решить вашу задачу
function is_date_format(str) {
    var a = str.match(/^(y{4}|[dmy]{2})([^a-zA-Z0-9]+)(y{4}|[dmy]{2})([^a-zA-Z0-9]+)(y{4}|[dmy]{2})$/);
    if(a.length != 6) {
        return false;
    }
    var b = {};
    b[a[1].substring(0,1)] = 1;
    b[a[3].substring(0,1)] = 1;
    b[a[5].substring(0,1)] = 1;
    if(b.d && b.m && b.y) {
        return true;
    } else {
        return false;
    }
}
alert(is_date_format('dd-mm-yyyy'));
alert(is_date_format('dd-mm-dd'));
Ответить с цитированием
  #10 (permalink)  
Старый 18.01.2012, 18:05
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Gvozd
чтобы понять чего хочет хочет ТС
Очень часто бывает, что:
1. тс сам не знает чего хочет
2. знает, но не понимает, как это реализовать
3. неверно формулирует задачу
4. выбирает далеко не самый лучший вариант ее решения
5. и т.д.

В данном случае скорее всего пункты 2 и 3.
Сообщение от Gvozd
Мы же тут не на свободную тему общаемся
Мы общаемся на тему javascript Если чем зацепил, измените.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с сортировкой даты rave82 jQuery 3 27.09.2011 01:35
jQuery DatePicker: формат даты при передаче в get запросе viko_rus jQuery 0 16.02.2011 13:33
Формат даты в Date picker for jQuery v4.0.4. seregarem jQuery 6 11.11.2010 16:31
Формат даты Ext.form.DateField risfek ExtJS 11 05.02.2010 06:18
RegExp & Mozilla (быстродействие) tau Общие вопросы Javascript 9 24.11.2008 16:35