Я пытаюсь взять параметр запроса и проверить правильность синтаксиса, предоставленного пользователем. Регулярное выражение кажется лучшим выбором для этого, но у меня возникают проблемы с его настройкой, поэтому шаблон не позволяет повторяться.
Шаблон, который я придумал:
(^(\w+)(=|!=|>=|>|<=|<|~)((')(.*)('))(\s(AND|OR)\s)(\w+)(=|!=|>=|>|<=|<|~)((')(.*)('))$)
Синтаксис, предоставленный пользователем, должен быть следующим:
[поле] [предикат] [одинарная кавычка] [значение] [одинарная кавычка] [пробел] [логический оператор] [пробел] [ поле] [предикат] [одиночная кавычка] [значение] [одинарная кавычка]
Где:
- поле - [любое слово]
- предикат - [= | ! = | > = | > | <= | <| ~] </li>
- логическим оператором является [AND | ИЛИ (с пробелом с обеих сторон)]
- значение равно [любое слово, заключенное в одинарные кавычки]
Пример выглядит следующим образом: field1 = ' value1 'OR field2 =' value2 '
Проблема, с которой я столкнулся, заключается в том, что созданный мной шаблон допускает такие вещи:
field1 =' value1 'OR field2 =' value2field1 = 'value' OR field2 = 'value2' '[ Это не должно работать, но работает ]
field1 =' value1 'ИЛИ field2 =' value2 field1 = 'value' ИЛИ field2 = 'value2' '[ Это не должно работать, но работает ]
field1 =' value1 'ИЛИ field2 =' value2 'И field3 =' value3 'ИЛИ field4 = 'value4' '[ Это не должно работать, но работает ]
Любая помощь будет принята, если шаблон повторяется.