| 
	| 
	
	| 
		
	| 
			
			 
			
				25.10.2014, 04:07
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 23.10.2010 
						Сообщений: 2,718
					 
		
 |  |  
	| При чем тут php. Из него валятся паттерны в атрибуты, а из атрибутов в js, поэтому приходится выбирать из подмножества совпадающих по лексике и логике. 
 Я было обрадовался с предыдущим вариантом, но накатав функцию превращения русских дат в timestamp понял что ошибки будут теперь выводится в фазе записи в БД, а надо чтоб в фазе валидации, то есть на 1 фазу раньше.
 |  |  
	| 
		
	| 
			
			 
			
				25.10.2014, 06:38
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 23.10.2010 
						Сообщений: 2,718
					 
		
 |  |  
	| Походу задробить, ну их нафиг эти названия, народ и так-то печатать не горазд, все равно числом вводить будет. Кроме того наконец-то дочитал мануал по php strtotime() которая, оказывается, понимает нашу нотацию просто по отсутствию американских косых. То есть 09/11/2001 - посчитает по-ихнему, а 11 09 2011, или 11.09.2001, 11-09-2001, 11\t09\t2001 - по-нашему. 
Базовую регу натырил тут - http://www.regular-expressions.info/dates.html  - в самом низу |  |  
	| 
		
	| 
			
			 
			
				25.10.2014, 11:20
			
			
			
		 |  
	| 
		
			
			| Кандидат Javascript-наук     |  | 
					Регистрация: 14.10.2014 
						Сообщений: 117
					 
		
 |  |  
	| 
	
 
	| Сообщение от kostyanet |  
	| То есть рега матчит дату 12 янв 1987 |  
	
 Вот это вроде работает
 
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))
			 Последний раз редактировалось terminator-101, 25.10.2014 в 12:03.
 |  |  
	| 
		
	| 
			
			 
			
				25.10.2014, 11:57
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 23.10.2010 
						Сообщений: 2,718
					 
		
 |  |  
	| Да какой нах сплит, это же текстовое поле которое наравне с другими проверяется сугубо по им самим предоставленному паттерну. Ну то есть несколько более высокий уровень абстракции чем сплит.
 Хера на месяцы текстом, в общем.
 
 Собственно оно текстовое именно потому что type="data" обсижен хромированными мухами. Я лично не собираюсь нацию переучивать на ISO8601, поэтому сделал type="text"
 |  |  
	| 
		
	| 
			
			 
			
				25.10.2014, 12:06
			
			
			
		 |  
	| 
		
			
			| Кандидат Javascript-наук     |  | 
					Регистрация: 14.10.2014 
						Сообщений: 117
					 
		
 |  |  
	| kostyanet,Ты ебанулся? Я сплитом просто массив сформировал, чтобы регуляркой по нему пройтись, проверить кусок твой сомнительный. Смотри UDP выше.
 |  |  
	| 
		
	| 
			
			 
			
				25.10.2014, 12:19
			
			
			
		 |  
	| 
		
			
			| Кандидат Javascript-наук     |  | 
					Регистрация: 14.10.2014 
						Сообщений: 117
					 
		
 |  |  
	| 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)])
 |  |  
	| 
		
	| 
			
			 
			
				25.10.2014, 12:38
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 23.10.2010 
						Сообщений: 2,718
					 
		
 |  |  
	| Не мучайтесь, дату все равно невозможно проверить практическими регами, даже если месяцы числами. Потому что некоторых дат внутри разрешенного диапазона не существует. Ну или придется регу молотить на пол-страницы, что выводит такую регу из диапазона практических.
 Если юзер впишет 30 февраля 1987 то х ему а не открытка на ДР, он не рождался вообще!
 
 То есть пришлось-таки выводить эксепшн из фазы подготовки к записи.
 |  |  
	| 
		
	| 
			
			 
			
				25.10.2014, 12:45
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 27.05.2010 
						Сообщений: 33,150
					 
		
 |  |  
	| 
	
 
	| Сообщение от kostyanet |  
	| Если юзер впишет 30 февраля 1987 |  
	
 
innerHTML....?
	
 
	| Цитата: |  
	| вариант невозможности выбрать несуществующую дату |  
	
 |  |  
	| 
		
	| 
			
			 
			
				25.10.2014, 12:52
			
			
			
		 |  
	| 
		
			
			| Кандидат Javascript-наук     |  | 
					Регистрация: 14.10.2014 
						Сообщений: 117
					 
		
 |  |  
	| kostyanet,
  
	
 
	| Сообщение от kostyanet |  
	| невозможно проверить практическими регами |  
	
 Можно, если потрахаться, но не нужно. Будешь отсеивать 99% случаев, это уже хорошо. Идеально, как правило не надо. |  |  
	| 
		
	| 
			
			 
			
				25.10.2014, 12:53
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 23.10.2010 
						Сообщений: 2,718
					 
		
 |  |  
	| Разрешаю вам потрахаться. |  |  |  |