【问题标题】:NumberFormatter parse returns false for Currency type on Symfony 2.5NumberFormatter 解析在 Symfony 2.5 上为 Currency 类型返回 false
【发布时间】:2016-07-08 13:58:08
【问题描述】:

我有一个 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,国际版本是 1.1.0,没有 default_locale(但我尝试将其设置为 en-US,但没有任何改变)。另外,我在 Ubuntu 16.04 上,使用 MySQL 5.7.12 和 Apache2。

我已经在这里和网上查找了解决方案,但没有得到任何解决方案。可以帮忙吗,谢谢?

【问题讨论】:

  • $request->get('some_value') 的结果是什么?
  • @ShiraNai7 来自表单的 int 值,例如。 400
  • @ShiraNai7 刚刚尝试使用 $this->numberFormatter->parse( (string) $request->get('some_value') )$this->numberFormatter->parse( (int) $request->get('some_value') ) 强制 parse() 但又一次 - 没有运气。
  • 我认为可能是这样。看我的回答。

标签: php internationalization number-formatting symfony-2.5


【解决方案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 不支持货币符号。)

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2012-09-02
    • 1970-01-01
    • 2014-04-13
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多