у меня есть textbox
, для ввода пользователем выражения. Я хочу проверить введенное выражение. Есть какой-либо способ сделать это?
Например : (1 * 2) + 3 * 4 верно, (1 ** 2) + * 3 неверно.
Спасибо.
AFAIK вы собираетесь использовать eval()
, если вы не хотите тянуть некоторые махинации с php_check_syntax()
что потребует от вас сохранить выражение в файл, который кажется громоздким.
eval()
вернусь false
если в коде есть синтаксическая ошибка; если нет, он вернется null
или возвращаемое значение предоставленного выражения. Однако это вызовет у вас горе, если вы оцениваете выражение, которое обычно возвращает false.
Обратите внимание, что с помощью eval()
позволит любому ввести произвольный PHP в вашу форму и выполнить его, что, очевидно, может быть очень плохой идеей, и к нему следует подходить с особой осторожностью.
Проверьте этот похожий вопрос: PHP eval и захват ошибок (насколько это возможно)
Не знаю, поможет ли это вам (ваш вопрос немного расплывчатый *), но у кого-то есть арифметический оценщик (без 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
, Нужно ли рассчитывать до определенного числового значения? Строка должна быть точным соответствием? Строка постоянно изменяется и должна быть проверена как правильное математически правильное выражение?