Проверьте, имеет ли строка формат SortableDateTimePattern - PullRequest
1 голос
/ 12 ноября 2009

Можно ли как-нибудь легко проверить, соответствует ли строка SortableDateTimePattern ("s"), или мне нужно написать регулярное выражение?

У меня есть форма, где пользователи могут вводить дату авторского права (в виде строки), и это разрешенные форматы:

Год: ГГГГ (например, 1997)

Год и месяц: ГГГГ-ММ (например, 1997-07)

Полная дата: ГГГГ-ММ-ДД (например, 1997-07-16)

Полная дата плюс часы и минуты: ГГГГ-ММ-ДДЧч: ммТЖД (например, 1997-07-16T19: 20 + 01: 00)

Полная дата плюс часы, минуты и секунды: ГГГГ-ММ-ДДЧч: мм: ссТЗД (например, 1997-07-16T19: 20: 30 + 01: 00)

Полная дата плюс часы, минуты, секунды и десятичная доля секунды ГГГГ-ММ-ДДчч: мм: сс.тТЗД (например, 1997-07-16Т19: 20: 30.45 + 01: 00)

У меня нет большого опыта написания регулярных выражений, поэтому, если есть более простой способ сделать это, я был бы очень признателен!

Ответы [ 2 ]

1 голос
/ 12 ноября 2009

Недостаточно проверено и, следовательно, не надежно, но, похоже, работает следующее:

var regex:RegExp = /(?<=\s|^)\d{4}(-\d{2}(-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{2})?)?\+\d{2}:\d{2})?)?)?(?=\s|$)/g;
var test:String = "23 1997 1998-07 1995-07s 1937-04-16 " + 
                  "1970-0716 1993-07-16T19:20+01:01 1979-07-16T19:20+0100 " + 
                  "2997-07-16T19:20:30+01:08 3997-07-16T19:20:30.45+01:00";
var result:Object
while(result = regex.exec(test))
    trace(result[0]);

Отслеживаемый вывод:

1997
1998-07
1937-04-16
1993-07-16T19: 20 + 01: 01
2997-07-16T19: 20: 30 + 01: 08
3997-07-16T19: 20: 30.45 + 01: 00

Я использую ActionScript здесь, но регулярное выражение должно работать в большинстве разновидностей. При реализации на вашем языке обратите внимание, что первый и последний / являются разделителями, а последний g обозначает глобальный.

0 голосов
/ 12 ноября 2009

Я бы разделил поле ввода на множество (по одному на год, месяц, день и т. Д.).

Вы можете использовать Javscript для перехода от одного поля к следующему, когда оно заполнено (то есть, если в поле года указано четыре символа, переместите фокус на месяц) для более плавного ввода.

Затем вы можете проверить каждое поле независимо и, наконец, построить полную строку даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...