Попытка разбить строку на 3 переменные, но немного сложнее - PHP - PullRequest
1 голос
/ 08 декабря 2010

Изучив основы PHP, я решил испытать себя и создать простой калькулятор. После некоторых попыток я понял это, но я не совсем доволен этим. Я хочу сделать его более удобным для пользователя и иметь ввод калькулятора только в одном поле, очень похожее на поиск в Google.

Так что просто наберите: 5 + 2 и получите 7.

Как бы я разбил строку "5 + 2" на три переменные, чтобы математические функции могли преобразовывать числа в целые числа и распознавать оператор, а также учитывать возможность использования пробелами между значениями?

Вы бы взорвали струну? Но чем бы вы взорвали его, если бы не было пробелов? Я также наткнулся на функцию preg_split, но, похоже, не могу обернуться или узнать, подходит ли она для решения этой проблемы. Какой метод будет лучшим вариантом для этого?

Ответы [ 4 ]

2 голосов
/ 08 декабря 2010
$calc = "5* 2+ 53";
$calc = preg_replace('/(\s*)/','',$calc);
print_r(preg_split('/([\x28-\x2B\x2D\x2F])/',$calc,-1,PREG_SPLIT_DELIM_CAPTURE));

Это моя ставка, в результате

Array
(
    [0] => 5
    [1] => *
    [2] => 2
    [3] => +
    [4] => 53
)
1 голос
/ 08 декабря 2010

Возможно, вам понадобится какое-нибудь умное регулярное выражение, чтобы разделить его примерно так:

$ myOutput = split ("(-? [0-9] +) | ([+ - * /] {1}) | (-? [0-9] +) ");

Я не проверял это - просто пример полупсуэдо извините: -> просто пытаюсь выделить то, что вам нужно запомнитьчто ваш оператор - (минус) может появиться в начале целого числа, чтобы сделать его отрицательным числом, чтобы у вас могли возникнуть проблемы с такими вещами, как -1-21, что допустимо, но усложняет ваши правила регулярных выражений.

0 голосов
/ 08 декабря 2010

У вас есть правильная идея с preg_split.Это будет работать примерно так:

$values = preg_split("/[\s]+/", "76  +    23");

Полученный массив будет содержать значения, НЕ являющиеся пробелами:

Значения должны выглядеть следующим образом: $ values ​​[0]: "76" $ values[1]: "+" $ values ​​[2]: "23"

"/ [\ s] + /" - это шаблон регулярного выражения, который соответствует любым пробельным символам один или несколько раз.Однако, если пробелов нет вообще, preg_split просто вернет исходные «5 + 2» в виде одной строки в первом элементе массива.т.е.:

$values[0] = "5+2"
0 голосов
/ 08 декабря 2010

Вам придется разделить строку с помощью регулярных выражений.Например, простое регулярное выражение для 5 + 2 будет выглядеть так:

\d\+\d

Проверьте эту ссылку .Вы можете создавать и проверять свои регулярные выражения там.Для калькулятора это будет не так сложно.

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