Парсировать валюту из строки - PullRequest
7 голосов
/ 20 февраля 2011

Я хочу проанализировать валюту из строки в PHP, я посмотрел на числовой форматер , но у меня нет PHP 5.3 или возможности добавлять расширения.

Валюта будет существовать только один раз для каждой строки и будет иметь префикс с символом валюты, в моем случае это знак фунта £.Валюта может быть в одном из следующих форматов:

£0.90
£100
£100.10
£1000

Каков наилучший способ достижения этого?

Редактировать

Здесьпример строки:

Paid a bill £153.93

Я хочу получить значение валюты в переменную.

Ответы [ 5 ]

9 голосов
/ 20 февраля 2011
(float)substr($input, strpos($input, "£")+1);

Это даст вам следующие результаты:

float(0.9)
float(100)
float(100.1)
float(1000)
float(153.93)

РЕДАКТИРОВАТЬ : обновлено, чтобы отразить изменение в вопросе.это при условии, что все строки похожи на ту, что вы дали в качестве примера.

7 голосов
/ 26 сентября 2012

У меня есть другой ответ. Это может быть касание быстрее, чем при использовании strpos, и было бы лучше, если бы на входе была возможность пробела.

$input = "£250.75";
$output = floatval(ltrim($input,"£"));
echo $output;
250.75

Вы также можете добавить другие валюты в список символов в ltrim:

$output = floatval(ltrim($input,"£$¢"));

Это уберет $ или £ или ¢ с левой стороны вашего номера, а также пробел, который сломает решение выше, которое использует strpos. Кроме того, это дало бы тот же результат, если бы символ валюты в некоторых случаях был пропущен.

2 голосов
/ 26 сентября 2012
preg_match('/(?<=£)(?=[\d.]*\d)(\d*(?:\.\d*)?)/', $input, $matches);

найдет совпадение в любом из них:

  • £ 0,10
  • £ 0,10
  • £ 100
  • £ 100,00

и т.д.

0 голосов
/ 21 февраля 2011
$price = (float) substr($input, 1, strlen($input) - 1);
0 голосов
/ 20 февраля 2011

Вы можете сделать это с помощью регулярного выражения (значение будет соответствовать $ match [1]):

preg_match('/£([0-9]+|[0-9]+\.?[0-9]{2})/', $text, $matches);
...