Проверьте выражение в переполнении стека

у меня есть textbox, для ввода пользователем выражения. Я хочу проверить введенное выражение. Есть какой-либо способ сделать это?
Например : (1 * 2) + 3 * 4 верно, (1 ** 2) + * 3 неверно.
Спасибо.

0

Решение

AFAIK вы собираетесь использовать eval(), если вы не хотите тянуть некоторые махинации с php_check_syntax() что потребует от вас сохранить выражение в файл, который кажется громоздким.

eval() вернусь false если в коде есть синтаксическая ошибка; если нет, он вернется null или возвращаемое значение предоставленного выражения. Однако это вызовет у вас горе, если вы оцениваете выражение, которое обычно возвращает false.

Обратите внимание, что с помощью eval() позволит любому ввести произвольный PHP в вашу форму и выполнить его, что, очевидно, может быть очень плохой идеей, и к нему следует подходить с особой осторожностью.

Проверьте этот похожий вопрос: PHP eval и захват ошибок (насколько это возможно)

0

Другие решения

Не знаю, поможет ли это вам (ваш вопрос немного расплывчатый *), но у кого-то есть арифметический оценщик (без eval!) имеется в наличии: PHP функция для оценки типа строки "2-1" как арифметика 2-1 = 1

Тогда, возможно, назначить результаты как

$true = <(1 * 2) + 3 *4 result here>;
$false = <(1 ** 2) +* 3 result here>;

и использовать для проверки.

Если вам нужно просто проверить строки, попробуйте регулярные выражения или точное совпадение строк с удаленными пробелами.

// Basic string matching.
$expected = '(1*2)+3*4';
$data = <get data from text input to this variable or similar>;

if ($expected == str_replace(' ', '', $data)) {
return true;
}

...

Если вам нужно проверить форматирование (например, математическую правильность заданной строки), попробуйте арифметический анализатор, чтобы проверить, возвращает ли строка число:

$value = <use arithmetic evaluator to get the value>;

if (is_numeric($value)) {
return true;
}

...

* Не могли бы вы прояснить, что должны возвращать эти значения true или же false, Нужно ли рассчитывать до определенного числового значения? Строка должна быть точным соответствием? Строка постоянно изменяется и должна быть проверена как правильное математически правильное выражение?

0

По вопросам рекламы [email protected]