Я хочу проанализировать валюту из строки в PHP, я посмотрел на число форматера, но не получил PHP 5.3 или возможность добавлять расширения.
Валюта будет существовать только один раз за строку и будет иметь префикс символа валюты, в моем случае знак фунта £. Валюта может быть в одном из следующих форматов:
£0.90 £100 £100.10 £1000
Какой был бы лучший способ достижения этого?
редактировать
Вот пример строки:
Paid a bill £153.93
Я хочу получить значение валюты в переменной.
(float)substr($input, strpos($input, "£")+1);
Это даст вам следующие результаты:
float(0.9) float(100) float(100.1) float(1000) float(153.93)
EDIT : обновлено, чтобы отразить изменение вопроса. это предполагает, что все строки подобны тем, которые вы дали в качестве примера.
У меня есть другой ответ. Возможно, это будет быстрее, чем использование strpos, и было бы лучше, если бы была какая-либо возможность пробела на входе.
$input = "£250.75"; $output = floatval(ltrim($input,"£")); echo $output; 250.75
Вы также можете добавить другие валюты в список символов в ltrim:
$output = floatval(ltrim($input,"£$¢"));
Это разделило бы $ или £ или ¢ с левой стороны вашего номера, а также на пустое пространство, которое нарушило бы решение, выше которого использует strpos. Кроме того, это даст тот же результат, если в некоторых случаях символ валюты был оставлен.
preg_match('/(?<=£)(?=[\d.]*\d)(\d*(?:\.\d*)?)/', $input, $matches);
найдет матч в любом из них:
и т.п.
Вы можете сделать это с регулярным выражением ($ matches [1] будет иметь ваше значение):
preg_match('/£([0-9]+|[0-9]+\.?[0-9]{2})/', $text, $matches);
$price = (float) substr($input, 1, strlen($input) - 1);