PHP: преобразовать строку в математическое выражение

mfl
На сайте с 16.10.2006
Offline
134
mfl
6980

пример:

имеется строка вида: (1+2)*3

необходимо преобразовать её в математическое выражение и выполнить.

Есть ли решения данной задачи без использования eval()?

Спасибо.

[umka]
На сайте с 25.05.2008
Offline
456
#1

ручками парсер написать :)

Лог в помощь!
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#2

а чем eval не устраивает?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
[Удален]
#3

попробуй умножить на 1

т.е. $stroka*1

не пробовал - но авось проканает :)

SI
На сайте с 03.12.2007
Offline
130
#4

Через БД запросом: "select (1+2)*3"

-= Онлайн сервисы =-
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#5
kapow_expert:
попробуй умножить на 1
т.е. $stroka*1
не пробовал - но авось проканает :)

Неа, 0 будет.

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#6

Регуляркой проверить строку на предмет только разрешенных символов (цифры и символы +-/*()) и использовать eval.

BredoGen.
На сайте с 19.10.2009
Offline
98
#7
mfl:
пример:
имеется строка вида: (1+2)*3
необходимо преобразовать её в математическое выражение и выполнить.
Есть ли решения данной задачи без использования eval()?

Спасибо.

Стандартными средствами - никак.

Можете поискать парсер математических выражений на php, если очень нужно обойтись без eval();

[Удален]
#8

Действительно, eval() самое простое решение. Главное (как сказал и Алексей) — фильтровать символы.

В общем, можно попробовать так:

$str = '(1+2)*3';

$str = (float) preg_replace( '/([0-9\(\)\*\-\+\/\.]*)/e', '\\1', $str );
echo $str; // 9
mfl
На сайте с 16.10.2006
Offline
134
mfl
#9

Спасибо.

$str = '(1+2)*3';
$str = (float) preg_replace( '/([0-9\(\)\*\-\+\/\.]*)/e', '\\1', $str );
echo $str; // 9

устраивает полностью

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий