我有一个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。
我在这里和网上查找了解决方案,但无法得到任何解决方案。你能帮忙吗,谢谢?
使用 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
不支持货币符号。