Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Regexpr варианты условий


Автор: rith2 19.4.2011, 13:18
Привет!

Изучаю regexpr. Необходимо контролировать ввод данных пользователями. Контроль за датой формата: дд.мм.гггг

Пока что сделал так 

'^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)\d\d'

Проблема с установкой года - получается что год может начинать с "19" либо с "20" а потом любые две цифры от "0" до "9" . 

А возможно ли в regexpr устанавливать условия ? 
Дескать если первые две "19", то потом любые две цифры, а если первые две цифры "20", то третья 0 либо 1 а четвертая от 0 до 9

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

Прочитал кучу инфы, юзал поиск гугл. Чувствую что вот вот гдет решение, а как конкретно не понятно  smile 


Автор: Akella 19.4.2011, 14:03
Цитата(rith2 @  19.4.2011,  13:18 Найти цитируемый пост)
юзеры забивают дату

что делают?  smile  smile

Добавлено через 31 секунду
Цитата(rith2 @  19.4.2011,  13:18 Найти цитируемый пост)
Прочитал кучу инфы, юзал поиск гугл. Чувствую что вот вот гдет решение, а как конкретно не понятно

Use TDateTimePicker, Luke

Автор: rith2 19.4.2011, 16:45
Цитата(Akella @ 19.4.2011,  14:03)
Цитата(rith2 @  19.4.2011,  13:18 Найти цитируемый пост)
юзеры забивают дату

что делают?  smile  smile

Добавлено @ 14:04
Цитата(rith2 @  19.4.2011,  13:18 Найти цитируемый пост)
Прочитал кучу инфы, юзал поиск гугл. Чувствую что вот вот гдет решение, а как конкретно не понятно

Use TDateTimePicker, Luke

Не вариант. Пользователи заносят записи в БД FireBird через клиентскую программу. Менять ее нет возможности. Делаю UDF на делфи, которая проверяет вводимую информацию. В данном случае дату на соответствие маски - дд.мм.гггг. Нужно чтоб год был от 1910 до 2012 например. И вот как это условие сделать в regexpr ума ни приложу =(

Автор: Akella 19.4.2011, 16:46
хм... а зачем полностью цитировать моё сообщение? smile

Добавлено через 54 секунды
а как тогда firebird пропускает некорректную дату? ответь! неправильый формат поля?

Автор: MetalFan 19.4.2011, 17:28
Цитата(rith2 @  19.4.2011,  13:18 Найти цитируемый пост)
А возможно ли в regexpr устанавливать условия ? 

http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F#.D0.9F.D0.BE.D0.B8.D1.81.D0.BA_.D0.BF.D0.BE_.D1.83.D1.81.D0.BB.D0.BE.D0.B2.D0.B8.D1.8E

Автор: rith2 19.4.2011, 18:07
Цитата(Akella @ 19.4.2011,  16:46)
а как тогда firebird пропускает некорректную дату? ответь! неправильый формат поля?

Немножко непривычно, что цитата в отдельном поле ) 


Потому что у поля хранящего дату тип varchar =) (не спрашивайте почему - структуру БД и клиентскую прогу спустило вышестоящее руководство) Кроме самого формата, еще нужно ограничить смысл вводимых данных - некоторые юзвери вводят например дату 10.10.1234 и прочую фигню

Автор: Akella 19.4.2011, 19:07
Цитата(rith2 @  19.4.2011,  18:07 Найти цитируемый пост)
отому что у поля хранящего дату тип varchar =)

ну... теперь мучайтесь

Добавлено через 4 минуты и 2 секунды
http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D0%B5+%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0+%D0%B4%D0%B0%D1%82%D1%8B

Автор: rith2 20.4.2011, 06:03
Спасибо большое! Про википедию както не додумался =) В общем вот так вот получилось

'^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](\b0*(19[1-9][0-9]|20[0-1][0-9])\b)';

Год от 1910 до 2019 =) 

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