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



我有一个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不支持货币符号。

相关内容

  • 没有找到相关文章

最新更新