对于Symfony 2.5上的Currency类型,NumberFormatter parse返回false

时间:2016-07-08 13:58:09

标签: php internationalization number-formatting symfony-2.5

我有一个Symfony 2.5项目,我正在尝试在后端实现货币验证。因此,PHP的国际化库中有 NumberFormatter 类,可以解析所有必要的输入。出于某种原因,虽然parse()方法总是返回false。

代码示例:

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')
    );
    //....
}

没什么好看的。 intl mbstring 扩展程序都已安装并运行 - 使用phpinfo();

进行检查

我正在使用PHP5.6,intl版本是1.1.0而没有default_locale(但我已经尝试将其设置为en-US而没有任何改变)。另外,我在Ubuntu 16.04上,使用MySQL 5.7.12和Apache2。

我已经在这里和网上查找解决方案,但无法获得任何解决方案。你能帮忙吗,谢谢?

1 个答案:

答案 0 :(得分: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不支持货币符号。)