PHP калькулятор с одним полем ввода - PullRequest
4 голосов
/ 14 июня 2011

Мне нужно, чтобы поле ввода текста выполняло или не выполняло базовые вычисления.Пример

<input type="text" />

Затем я отправляю по почте, и пост узнает, нужно ли вводить значение или делать вычисления

Примеры значений

14.5
10.3+14+35

Должно дать мне соответственно

14.5
59.3

Кто-нибудь знает метод, сценарий, ... что-нибудь для этого?Или есть идеи, как это сделать?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 14 июня 2011

Без использования eval, но вам все равно нужно быть осторожным и выявлять любые ошибки синтаксического анализа, например, пытаться оценить ')' и т. Д. У меня есть идеи, но я оставлю их читателю или другому дождливому дню. ссылка на сайт

function calculate_string( $mathString ) {

    // trim white spaces
    $mathString = trim($mathString);

    // remove any non-numbers chars; exception for math operators
    $mathString = ereg_replace ('[^0-9\+-\*\/\(\) ]', '', $mathString);

    $compute = create_function("", "return (" . $mathString . ");" );
    return 0 + $compute();

}

$string = " (1 + 1) * (2 + 2)";
echo calculate_string($string);  // outputs 8  
0 голосов
/ 07 февраля 2013

С помощью следующего регулярного выражения вы можете проверить, является ли ввод действительным математическим синтаксисом, и использовать eval ():

/^(\(*[\+\-]?\(*[\+\-]?\d+(.\d+)?\)*[\+\-\*\/]?)*$/

Допустимые символы: 1 2 3 4 5 6 7 8 9 0. + - * / ()

0 голосов
/ 14 июня 2011

Одним из быстрых решений было бы проверить с помощью substr(), есть ли на входе математические операторы (+, -, ...).Если это так, выполните математику, используя eval() (довольно грязный хак, поскольку он принимает весь код PHP, а не только математику), или создайте соответствующее дерево операций вручную, а затем получите результаты.Если математических операторов нет, просто распечатайте ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...