Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярное выражение для проверки года 
:(
    Опции темы
Kuznec
Дата 27.10.2013, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В поиске



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.4.2007
Где: КМА

Репутация: нет
Всего: нет



Есть задача проверять год Зимних Олимпийских игр начиная с 2000 года и по текущий + 4 года вперёд. Т.е. выражение должно пропускать только 2002, 2006, 2010 и 2014 года. Есть ли возможность делать такую проверку с помощью регулярного выражения?
PM MAIL WWW   Вверх
AVA12
Дата 27.10.2013, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 4.5.2008

Репутация: 0
Всего: 4



Цитата
выражение должно пропускать только 2002, 2006, 2010 и 2014 года

/2002|2006|2010|2014/
PM ICQ Jabber   Вверх
Kuznec
Дата 27.10.2013, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В поиске



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.4.2007
Где: КМА

Репутация: нет
Всего: нет



Цитата(AVA12 @  27.10.2013,  15:20 Найти цитируемый пост)
/2002|2006|2010|2014/ 


Не, это не годится, это для примера использовалась начальная дата 2000, а если брать ранние, то выражение ещё растянется. Почитал ещё раз регулярные выражения, так сказать, освежить данные, видимо циклы там всё-таки не предусмотрены.

Надо что-то своё придумывать универсальное для фильтрации данных.
PM MAIL WWW   Вверх
ksnk
Дата 27.10.2013, 22:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Код

'/20(?:[02468][048]|[13579][26])/'


Это сообщение отредактировал(а) ksnk - 27.10.2013, 22:52


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 28.10.2013, 10:18 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



имхо не для регулярки задача.
Код

$year = '2014';
$sog_year = (1896 <= $year) && ($year%4 == 0);
$wog_year = ((1924 <= $year && $year <= 1992) && ($year%4 == 0)) ||
                      ((1994 <= $year) && (($year+2)%4 == 0)) ;

PM MAIL   Вверх
ksnk
Дата 28.10.2013, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



baldina
Цитата(Kuznec @  27.10.2013,  14:05 Найти цитируемый пост)
Есть задача проверять год Зимних Олимпийских игр начиная с 2000 года и по текущий + 4 года вперёд

для  такой постановки - вполне для регулярки. Хотя у меня, как оказалось - летние олимпийские игры :(

зимние вот так:
Код

'/20(?:[02468][26]|[13579][048])/'



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 28.10.2013, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



я тоже не заметил сразу.
зато регулярка красивая ;-)

Цитата(ksnk @  28.10.2013,  12:52 Найти цитируемый пост)
для  такой постановки

Цитата(Kuznec @  27.10.2013,  15:38 Найти цитируемый пост)
это для примера использовалась начальная дата 2000, а если брать ранние

кто знает, что понадобится. а в общем случае регуляркой громоздко
PM MAIL   Вверх
Kuznec
Дата 28.10.2013, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В поиске



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.4.2007
Где: КМА

Репутация: нет
Всего: нет



Цитата(ksnk @  28.10.2013,  12:52 Найти цитируемый пост)
для  такой постановки - вполне для регулярки.


В общем-то, смысл то понятен вашего выражения, но, в таком случае, оно пропустит дату 2022, а требуется проверка до 2013+4 = 2017, т.е. только 2014 год пропускать. Но, всё равно спасибо за предложенный вариант - не ожидал, что так можно. С прошлым веком, видимо, нужно ещё дополнительно дописывать.

 
Цитата(baldina @  28.10.2013,  10:18 Найти цитируемый пост)
имхо не для регулярки задача.


К сожалению, да. Думал, что есть там какие-нибудь циклы, т.к. этот вопрос на 100% не штудировал. Но, и решение задачи программой (PHP, JS) тоже не подходит, в том смысле, что нужны какие-то универсальные фильтры, записываемые примерно как регулярное выражение. Получается, что для этого необходимо ввести понятие цикла и понятие даты, а также понятие элементарные вычисление (+, -, *, /).
PM MAIL WWW   Вверх
baldina
Дата 28.10.2013, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(Kuznec @  28.10.2013,  18:21 Найти цитируемый пост)
решение задачи программой (PHP, JS) тоже не подходит

Цитата(Kuznec @  28.10.2013,  18:21 Найти цитируемый пост)
универсальные фильтры


не очень понятно что мешает использовать PHP и JS (ввиду ветки "PHP: общие вопросы"). Если это фильтр для запроса к БД, то там это тоже решаемо выражением.

В общем уточните как это будет применяться, а народ что-нить посоветует.

Добавлено через 52 секунды
Цитата(Kuznec @  28.10.2013,  18:21 Найти цитируемый пост)
для этого необходимо ввести понятие цикла

это как раз лишнее
PM MAIL   Вверх
Kuznec
Дата 28.10.2013, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В поиске



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.4.2007
Где: КМА

Репутация: нет
Всего: нет



Цитата(baldina @  28.10.2013,  18:53 Найти цитируемый пост)
В общем уточните как это будет применяться


Основная задача выглядит следующим образом.

Формируются объекты. Объектами могут выступать обычные страницы сайта (к примеру), человек, дом, школа и бесконечное множество реальных объектов. У каждого объекта, соответственно, есть свои свойства. Каждый объект имеет свой шаблон. И в этом шаблоне необходимо прописать фильтры. Если за объект взять Олимпийские игры, то в качестве свойства может выступать название города, где они проводились, год и т.д. Соответственно, необходимо правильно вписывать года, к примеру. Но, фильтр формировать должен не программист, а обычный пользователь, знающий, так сказать. Прогу пихать точно не айс, выражение должно храниться в БД в виде строки.

Пока пытаюсь данную задачу решить в виде регулярных выражений с добавлениями. Т.е. нужно будет спрограммить функцию, которая будет обрабатывать расширенное "регулярное выражение".

Были мысли применения и программ, но это крайний случай, если не получится вариант обычной строки. 


Цитата(baldina @  28.10.2013,  18:53 Найти цитируемый пост)
это как раз лишнее 

Возможно... 
PM MAIL WWW   Вверх
baldina
Дата 29.10.2013, 00:28 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(Kuznec @  28.10.2013,  20:43 Найти цитируемый пост)
Формируются объекты.

это не задача, а попытка решения какой-то задачи, некое проектное решение. но допустим. 
решение наделить объекты свойствами, из которых вытекает поведение объектов - это перекладывание из одного места в другое: налицо желание оградить кого-то или чего-то от программирования, оставив возможность программирования.
если объекты не классифицированы на типы, и эти типы не снабжены алгоритмами поведения на исходном языке, то такая попытка приводит в итоге к  (неосознанному) созданию языка программирования.
пользователю системы, у которого есть лишь средства задания статических данных, хранящихся в БД, достается трудно понимаемый и управляемый способ. например, таким способом трудно задавать ограничения на свойства, связанные с другими свойствами. скажем, если Олимпийские игры должны в качестве атрибутов иметь страну и город, как обеспечить согласованность страны и города?
итого: если отказываться от классификации объектов, проще и логичнее иметь возможность добавлять не только статичные свойства, но и код.
попытка привлечь регулярные выражения - шаг естественный, но этот способ не сможет решить любую задачу.

Добавлено через 4 минуты и 54 секунды
это немного похоже на изобретение шаблонизатора на php: если кто-то готов изучить богатый синтаксис шаблонизатора, ему и php изучить не сложно. а php сам себе вполне шаблонизатор. так что если есть смысл что-то создавать, то это будет специализированная библиотека.

Добавлено через 6 минут и 52 секунды
конечно, может быть желание создать предметно-ориентированный язык, но это требует совсем иных подходов и затрат.

Добавлено через 11 минут и 8 секунд
что именно предлагаю в данном случае:
создайте предопределенные типы объектов или хотя бы полей. поле типа "регулярное выражение". поля типа "страна", "город", "олимпийский год". в более общем виде - поле типа "ссылка на значение справочника": таким справочником может быть таблица со списком олимпийских лет, городов и т.д.
PM MAIL   Вверх
Kuznec
Дата 30.10.2013, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В поиске



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.4.2007
Где: КМА

Репутация: нет
Всего: нет



Подумал, подумал я, и решил, что будут использоваться заранее созданные настраиваемые фильтры, и по мере необходимости будут дополняться. В общем виде, для года настройки будут выглядеть так:

начало периода (смещение), конец периода (смещение), шаг

начало и конец периода может быть фиксированная дата, либо задаваться от текущей с использованием смещения. Т.е. в нашем случае начало периода 2002 (фиксированное число), конец периода текущая дата + смещение +4, и шаг 4.

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

Цитата(baldina @  29.10.2013,  00:28 Найти цитируемый пост)
создайте предопределенные типы объектов или хотя бы полей. поле типа "регулярное выражение". поля типа "страна", "город", "олимпийский год". в более общем виде - поле типа "ссылка на значение справочника": таким справочником может быть таблица со списком олимпийских лет, городов и т.д. 


Получается, что-то типа этого.
PM MAIL WWW   Вверх
baldina
Дата 30.10.2013, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(Kuznec @  30.10.2013,  13:26 Найти цитируемый пост)
фильтры и настройки должны именть однотипную структуру для организованного хранения

их можно хранить как одну строку, т.к. бд читать и писать будет не человек, а скрипт
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1194 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.