#php #regex #laravel #validation
#php #регулярное выражение #laravel #проверка
Вопрос:
Я хочу получать математические данные от пользователей и сохранять их в базе данных. Затем я хочу показать результат математического выражения. Теперь мне нужно правило проверки, чтобы проверить, является ли ввод допустимым математическим выражением. Это не должно быть очень сложным. Для меня достаточно простого сложения и вычитания. Например, 2 4 5 8
или 5-2 4
. Мне даже не нужны никакие скобки. Кто-нибудь может дать мне правило проверки, которое работает для валидатора laravel?
Комментарии:
1. Существует несколько математических пакетов php, которые интерпретируют математические выражения. Может быть, вы можете попробовать одно из этих? Если синтаксический анализ завершается неудачей, заданный ввод неверен. Может быть, этого достаточно для начала?
Ответ №1:
Я бы создал для этого специальное правило проверки, потому что я не думаю, что Laravel включает его по умолчанию. Итак, давайте создадим php artisan make:rule Expression
и внутри него что-то вроде этого:
public function passes($attribute, $value)
{
$value = preg_replace('s', '', $value);
return preg_match("/^d ([ -*/]{1}d ) $/", $value);
}
Как вы можете видеть, я ранее удалил любую форму пробелов, потому что это упрощает регулярное выражение при принятии таких случаев, как: «2 5», «2 5», «2 5′, «2 5».
Затем вы можете просто вызвать его в своем контроллере следующим образом:
'input' => ['required', new Expression]
Для управления скобками, к сожалению, regex вам не поможет. Вам придется использовать своего рода анализатор, способный обрабатывать бесконечные возможности группировки выражений, таких как «2 (5 * (3 / (1/2)))»). * 5)».