При чем тут php. Из него валятся паттерны в атрибуты, а из атрибутов в js, поэтому приходится выбирать из подмножества совпадающих по лексике и логике.
Я было обрадовался с предыдущим вариантом, но накатав функцию превращения русских дат в timestamp понял что ошибки будут теперь выводится в фазе записи в БД, а надо чтоб в фазе валидации, то есть на 1 фазу раньше. |
Походу задробить, ну их нафиг эти названия, народ и так-то печатать не горазд, все равно числом вводить будет. Кроме того наконец-то дочитал мануал по php strtotime() которая, оказывается, понимает нашу нотацию просто по отсутствию американских косых. То есть 09/11/2001 - посчитает по-ихнему, а 11 09 2011, или 11.09.2001, 11-09-2001, 11\t09\t2001 - по-нашему.
Базовую регу натырил тут - http://www.regular-expressions.info/dates.html - в самом низу |
Цитата:
re=/^(янв|фев|мар|апр|мая|июн|июл|авг|сен|окт|ноя|дек)[а-яА-Я]{0,5}$/ arr="вмая ма января январряло февраля марта апреля мая июня июля августя сентября октября ноября декабря".split(" ") arr.forEach(function(m){console.log(m, m.length, re.test(m))}) UPD полностью вот так попробуй, хотя полностью твою регулярку не проверял, хз pat = /^(0[1-9]|[12][0-9]|3[01])[- .](янв|фев|мар|апр|мая|июн|июл|авг|сен|окт|ноя|дек)[а-яА-Я]{0,5}[- .](19|20)\d\d$/ s1="10 янв 1999" s2="10 января 1999" s3="10 январяяяяяяя 1999" alert([pat.test(s1), pat.test(s2), pat.test(s3)]) console.log(s1.match(pat), s2.match(pat), s3.match(pat)) |
Да какой нах сплит, это же текстовое поле которое наравне с другими проверяется сугубо по им самим предоставленному паттерну. Ну то есть несколько более высокий уровень абстракции чем сплит.
Хера на месяцы текстом, в общем. Собственно оно текстовое именно потому что type="data" обсижен хромированными мухами. Я лично не собираюсь нацию переучивать на ISO8601, поэтому сделал type="text" |
kostyanet,
Ты ебанулся? Я сплитом просто массив сформировал, чтобы регуляркой по нему пройтись, проверить кусок твой сомнительный. Смотри UDP выше. |
kostyanet,
Если числовой формат месяца еще нужен, то вроде так pat = /^(0[1-9]|[12][0-9]|3[01])[- .](0[1-9]|1[012]|(янв|фев|мар|апр|мая|июн|июл|авг|сен|окт|ноя|дек)[а-яА-Я]{0,5})[- .](19|20)\d\d$/ s1="10 янв 1999" s2="10 января 1999" s3="10 11 1999" s4="10 14 1999" alert([pat.test(s1), pat.test(s2), pat.test(s3), pat.test(s4)]) |
Не мучайтесь, дату все равно невозможно проверить практическими регами, даже если месяцы числами. Потому что некоторых дат внутри разрешенного диапазона не существует. Ну или придется регу молотить на пол-страницы, что выводит такую регу из диапазона практических.
Если юзер впишет 30 февраля 1987 то х ему а не открытка на ДР, он не рождался вообще! То есть пришлось-таки выводить эксепшн из фазы подготовки к записи. |
Цитата:
Цитата:
|
kostyanet,
Цитата:
|
Разрешаю вам потрахаться.
|
Часовой пояс GMT +3, время: 18:02. |