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