Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ASP > ASP Validarors регулярные выражения!!! Need help!


Автор: Jony_cs 16.10.2007, 09:41
Проблема в следующем - необходимо сделать проверку TextBox на наличие в нем даты.
Необходимо разрешить ввод даты как в коротком формате: 1.1.1 = 01.01.2001 (1.1.98=01.01.1998)
так и в полном формате 01.01.2007
Поле не должно быть пустым.
Подскажите как это можно сделать?

Автор: tol05 16.10.2007, 10:07
RegularExpressionValidator и свой паттерн

а вообще
Код

DateTime d = new DateTime(1,1,1);
//или
DateTime d = new DateTime(01,01,01);

дает первое января первого года. Так что рекомендую хотя бы год полностью писать.

Автор: Jony_cs 16.10.2007, 11:01
Все дело в том, что у меня стоит 2 валидатора на это поле:
RequiredFieldValidator - проверяет TextBox на пустоту
RangeValidator - проверяет TextBox на правильность введенной даты (от 01.01.1960 - 01.01.2100)


Проверка даты осуществляется только в формате (mm.dd.yyyy), но мне нужен еще и краткий формат (точно не знаю как он называется) т.е. когда 1.1.1 = 01.01.2001.

DateTime d = new DateTime(1,1,1); не выход т.к. TextBox сначала проверяется на стороне клиента!

Думаю возможно это решить с помощью RegularExpressionValidator, но т.к. не знаток регулярных выражений, то  smile 

Автор: tol05 16.10.2007, 12:03
Цитата(Jony_cs @  16.10.2007,  11:01 Найти цитируемый пост)
DateTime d = new DateTime(1,1,1); не выход

я тебе то же самое говорил smile

RangeValidator убери. Потому что ты разрешаешь юзеру вводить дату способами, непонятными машине.
Цитата(Jony_cs @  16.10.2007,  09:41 Найти цитируемый пост)
1.1.1 = 01.01.2001

тебе нужно проверить, соответствует ли текст текстбокса (не дата, а именно текст, потому что 1.1.1 - не дата) твоему паттерну, потом отправить все это на сервер и там уже парсить и приводить к дате.

RegularExpressionValidator используй.
Пример - в msdn на ключ RegularExpressionValidator

паттерн я бы использовал такой
^([0-3]\d|[1-9]).([0-1][1-9]|[1-9]).([0-2]\d{3}|[0-2]?[1-9])$

но не настаиваю на нем. В Regex я спец - не очень.



Автор: Jony_cs 19.10.2007, 14:12
все оказалось не так сложно, как казалось smile необходимо подставить паттерн:
^([0]{1}[1-9]{1}|[1]{1}[0-2]{1}|[1-9]{1})(\\|\.|\/)([0]{1}[1-9]{1}|[1]{1}[0-9]{1}|[2]{1}[0-9]{1}|[3]{1}[0-1]{1}|[1-9]{1})(\\|\.|\/)([1-9]{1}|[0]{1}[1-9]{1}|[10-99]{2}|[190]{3}[0-9]{1}|[19]{2}[10-99]{2}|[200]{3}[0-9]{1}|[20]{2}[10-99]{2})$

получившиеся форматы:
mm.dd.yyyy
mm.dd.yy
m.d.y

проверял на значениях

+ 11/23/2000
+ 1/1/1
+ 2/2/20
+ 01/1/1980
+ 12/1/2000
+ 8/03/1901
+ 04/12/99

причем можно использовать '.'   '/'   '\', т.е. 11.23\2000

единственная проблема в том, что 02.31.2000 существует!!!! smile, но это решаемо программно.

tol05 спасибо за участие

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)