Исходная строка может быть в разных форматах. Может содержать (или нет) знак доллара, может иметь такие слова, как «bn» (что означает миллиард), тысячи (s), миллион (ы), миллиард (ы), может иметь десятичные точки и разделители тысяч (запятые). Кроме того, эта строка может содержать дополнительный текст, не связанный напрямую со значением.
Я хотел бы, чтобы эта строка была преобразована в целое число.
Например строка US$ 2,864.773 million in 2014
следует преобразовать в целое число 2864733000
,
Если бы можно было определить название валюты, это было бы просто идеально!
Есть ли готовые решения, такие как класс PHP или что-то еще?
Я бы использовал регулярное выражение, что-то вроде:
(\w*\$)\s*([0-9,.]+)\s+(thousand|million|billion|bn)?
который будет захватывать как валюту, так и стоимость. PHP:
if (preg_match('/(\w*\$)\s*([0-9,.]+)\s+(thousand|million|billion|bn)?/i', $input, $matches)) {
$currency = $matches[1];
$value = str_replace(',', $matches[2]);
$multiplier = null;
if (isset($matches[3])) {
$multiplier = $matches[3];
}
}
Объясняя немного регулярное выражение:
(\w*\$)
захватывает валюту / символ
\s*
допускает любые пробелы между валютой и значением
([0-9,.]+)
захватывает значение
(thousand|million|billion|bn)?
захватывает миллион / миллиард и т. д., а ?
делает это необязательным.
Других решений пока нет …