NumberFormatter parse 在 Symfony 2.5 上返回 Currency 类型的 false


NumberFormatter parse returns false for Currency type on 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')
    );
    //....
}

真的没什么好看的。intlmbstring 扩展都已安装并正在运行 - 已通过phpinfo();检查

我使用的是 PHP5.6,intl 版本是 1.1.0,没有default_locale(但我尝试将其设置为 en-US 并且没有任何变化)。另外,我使用的是Ubuntu 16.04,MySQL 5.7.12和Apache2。

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

使用 'NumberFormatter::CURRENCY 表示$style会使格式化程序期望一个数字金额,包括货币符号:

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

如果您希望解析通用数字,请使用其他样式之一,例如 '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不支持货币符号。