Как задать функцию через поле формы

310
28 сентября 2017, 12:17

У меня на страничке есть форма, в нее пользователь вводит функцию по определенному шаблону.

Например, x^3+x^2+20. Из этого поля мы получаем строку с функцией.

Как ее привести к виду, удобному для вычислений? Чтобы значение x подставлялось вместо элемента строки x, и дальше уже высчитывалось значение функции в конкретной точке.

Подскажите хотя бы идею. Я понимаю, что можно просто взять и поменять x на $x, но у меня при этом получается строка "2+3", например, которая при последующих действиях и ведет себя, как строка. И даже преобразование к числу не помогает

Answer 1

Довольно приблизительный пример для php5.6+:

<?php
// формула
$str = 'x^3+x^2+20';
// проверка на синтаксис (тут, в примере, конечно просто на допустимые символы проверяется) 
if (preg_match('/[^x\d\+\-\*\/^]/', $str)) {
    die('Недопустимый символ');
}
// замена переменной и символа степени
$str = str_replace(['x', '^'], ['$x', '**'], $str);
// а дальше можно считать
$x = 5;
// не рекомендуется использовать,
// но синтаксис формулы проверили, дырок нет в безопасности у нас ;)
eval('$y = ' . $str . ';');
var_dump($y); // int(170)

Тест http://sandbox.onlinephpfunctions.com/code/2c76d0cb08f4ae7b9fa5d5c4e77b34586c58beb9

READ ALSO
скрыть элемент шапки

скрыть элемент шапки

есть в шапке такие элементы:

311
Передача текста через input radio с javascript [требует правки]

Передача текста через input radio с javascript [требует правки]

При выборе пункта Нет, в форме автоматически добавляется текст "Нет", как это правильно реализовать на JS, заранее спасибо!

260
Интерактивная помощь в WPF приложении

Интерактивная помощь в WPF приложении

Пытаюсь сделать что то подобное на WPFНа архитектуре MVVM

233
Сделать таблицу невидимой

Сделать таблицу невидимой

Есть элемент table:

245