| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Регулярное выражение для проверки года |
| Автор: Kuznec 27.10.2013, 14:05 |
| Есть задача проверять год Зимних Олимпийских игр начиная с 2000 года и по текущий + 4 года вперёд. Т.е. выражение должно пропускать только 2002, 2006, 2010 и 2014 года. Есть ли возможность делать такую проверку с помощью регулярного выражения? |
| Автор: AVA12 27.10.2013, 15:20 | ||
/2002|2006|2010|2014/ |
| Автор: Kuznec 27.10.2013, 15:38 |
Не, это не годится, это для примера использовалась начальная дата 2000, а если брать ранние, то выражение ещё растянется. Почитал ещё раз регулярные выражения, так сказать, освежить данные, видимо циклы там всё-таки не предусмотрены. Надо что-то своё придумывать универсальное для фильтрации данных. |
| Автор: ksnk 27.10.2013, 22:51 | ||
|
| Автор: baldina 28.10.2013, 10:18 | ||
имхо не для регулярки задача.
|
| Автор: baldina 28.10.2013, 14:40 | ||
| я тоже не заметил сразу. зато регулярка красивая ;-)
кто знает, что понадобится. а в общем случае регуляркой громоздко |
| Автор: Kuznec 28.10.2013, 18:21 |
В общем-то, смысл то понятен вашего выражения, но, в таком случае, оно пропустит дату 2022, а требуется проверка до 2013+4 = 2017, т.е. только 2014 год пропускать. Но, всё равно спасибо за предложенный вариант - не ожидал, что так можно. С прошлым веком, видимо, нужно ещё дополнительно дописывать. К сожалению, да. Думал, что есть там какие-нибудь циклы, т.к. этот вопрос на 100% не штудировал. Но, и решение задачи программой (PHP, JS) тоже не подходит, в том смысле, что нужны какие-то универсальные фильтры, записываемые примерно как регулярное выражение. Получается, что для этого необходимо ввести понятие цикла и понятие даты, а также понятие элементарные вычисление (+, -, *, /). |
| Автор: baldina 28.10.2013, 18:53 |
не очень понятно что мешает использовать PHP и JS (ввиду ветки "PHP: общие вопросы"). Если это фильтр для запроса к БД, то там это тоже решаемо выражением. В общем уточните как это будет применяться, а народ что-нить посоветует. Добавлено через 52 секунды это как раз лишнее |
| Автор: Kuznec 28.10.2013, 20:43 |
Основная задача выглядит следующим образом. Формируются объекты. Объектами могут выступать обычные страницы сайта (к примеру), человек, дом, школа и бесконечное множество реальных объектов. У каждого объекта, соответственно, есть свои свойства. Каждый объект имеет свой шаблон. И в этом шаблоне необходимо прописать фильтры. Если за объект взять Олимпийские игры, то в качестве свойства может выступать название города, где они проводились, год и т.д. Соответственно, необходимо правильно вписывать года, к примеру. Но, фильтр формировать должен не программист, а обычный пользователь, знающий, так сказать. Прогу пихать точно не айс, выражение должно храниться в БД в виде строки. Пока пытаюсь данную задачу решить в виде регулярных выражений с добавлениями. Т.е. нужно будет спрограммить функцию, которая будет обрабатывать расширенное "регулярное выражение". Были мысли применения и программ, но это крайний случай, если не получится вариант обычной строки. Возможно... |
| Автор: baldina 29.10.2013, 00:28 |
это не задача, а попытка решения какой-то задачи, некое проектное решение. но допустим. решение наделить объекты свойствами, из которых вытекает поведение объектов - это перекладывание из одного места в другое: налицо желание оградить кого-то или чего-то от программирования, оставив возможность программирования. если объекты не классифицированы на типы, и эти типы не снабжены алгоритмами поведения на исходном языке, то такая попытка приводит в итоге к (неосознанному) созданию языка программирования. пользователю системы, у которого есть лишь средства задания статических данных, хранящихся в БД, достается трудно понимаемый и управляемый способ. например, таким способом трудно задавать ограничения на свойства, связанные с другими свойствами. скажем, если Олимпийские игры должны в качестве атрибутов иметь страну и город, как обеспечить согласованность страны и города? итого: если отказываться от классификации объектов, проще и логичнее иметь возможность добавлять не только статичные свойства, но и код. попытка привлечь регулярные выражения - шаг естественный, но этот способ не сможет решить любую задачу. Добавлено через 4 минуты и 54 секунды это немного похоже на изобретение шаблонизатора на php: если кто-то готов изучить богатый синтаксис шаблонизатора, ему и php изучить не сложно. а php сам себе вполне шаблонизатор. так что если есть смысл что-то создавать, то это будет специализированная библиотека. Добавлено через 6 минут и 52 секунды конечно, может быть желание создать предметно-ориентированный язык, но это требует совсем иных подходов и затрат. Добавлено через 11 минут и 8 секунд что именно предлагаю в данном случае: создайте предопределенные типы объектов или хотя бы полей. поле типа "регулярное выражение". поля типа "страна", "город", "олимпийский год". в более общем виде - поле типа "ссылка на значение справочника": таким справочником может быть таблица со списком олимпийских лет, городов и т.д. |
| Автор: Kuznec 30.10.2013, 13:26 | ||
| Подумал, подумал я, и решил, что будут использоваться заранее созданные настраиваемые фильтры, и по мере необходимости будут дополняться. В общем виде, для года настройки будут выглядеть так: начало периода (смещение), конец периода (смещение), шаг начало и конец периода может быть фиксированная дата, либо задаваться от текущей с использованием смещения. Т.е. в нашем случае начало периода 2002 (фиксированное число), конец периода текущая дата + смещение +4, и шаг 4. В таком случае, данный фильтр будет человеку понятен и не нужно изучать регулярки и т.д., и никакого программирования в виде завуалированного кода. Только задача усложняется тем, что все эти фильтры и настройки должны именть однотипную структуру для организованного хранения над чем и нужно подумать теперь.
Получается, что-то типа этого. |
| Автор: baldina 30.10.2013, 14:00 | ||
их можно хранить как одну строку, т.к. бд читать и писать будет не человек, а скрипт |