2016-07-08 3 views
0

У меня есть проект Symfony 2.5, где я пытаюсь выполнить проверку валюты на внутреннем сервере. По этой причине есть класс NumberFormatter из библиотеки интернационализации PHP с разбором всех необходимых входных данных. По какой-то причине метод parse() всегда возвращает false.NumberFormatter parse возвращает false для Тип валюты на Symfony 2.5

Образец кода:

private $numberFormatter; 

function __construct() 
{ 
    $this->numberFormatter = 
     new \NumberFormatter("en-US", \NumberFormatter::CURRENCY); 
} 

//.... 

public function getDataAction(Request $request) 
{ 
    $newValue = $this->numberFormatter->parse(
     $request->get('some_value') 
    ); 
    //.... 
} 

Ничего особенного на самом деле. Оба аэроропорт и MBstring расширения установлены и работает - проверено с phpinfo();

Я использую PHP5.6, междунар версия 1.1.0, не DEFAULT_LOCALE (но я попытался установить его до ванной -US и ничего не изменилось). Кроме того, я на Ubuntu 16.04, с MySQL 5.7.12 и Apache2.

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

+1

Что является результатом '$ request-> Get ('some_value')'? – ShiraNai7

+0

@ ShiraNai7 Значение int, исходящее из формы, например. 400 –

+0

@ ShiraNai7 Просто попробовал заставить parse() с '$ this-> numberFormatter-> parse ((string) $ request-> get ('some_value'))' и '$ this-> numberFormatter-> parse ((int) $ request-> get ('some_value')) ', но опять же - не повезло. –

ответ

1

Использование \NumberFormatter::CURRENCY для $style делает форматировщик ожидать числовой суммы, в том числе и символ валюты:

$formatter = new \NumberFormatter('en-US', \NumberFormatter::CURRENCY); 
var_dump($formatter->parse('123456')); // bool(false) 
var_dump($formatter->parse('$123456')); // float(123456) 

Если вы хотите, чтобы разобрать общие номера, использовать one of the other styles, например, \NumberFormatter::DECIMAL:

$formatter = new \NumberFormatter('en-US', \NumberFormatter::DECIMAL); 
var_dump($formatter->parse('1234565')); // float(1234565) 
var_dump($formatter->parse('$123456')); // bool(false) 

(\NumberFormatter::DECIMAL не поддерживает символы валюты.)

Смежные вопросы