如何使用PHP从Excel转换负数
我使用php将一个“xlsx”文件导入MySQL数据库 在Excel中,数字如下(德语数字格式):2564.30或-2564.30 我将此字符串转换为数字,以便能够在MySQL中将其保存为数字,如下所示:如何使用PHP从Excel转换负数,php,regex,Php,Regex,我使用php将一个“xlsx”文件导入MySQL数据库 在Excel中,数字如下(德语数字格式):2564.30或-2564.30 我将此字符串转换为数字,以便能够在MySQL中将其保存为数字,如下所示: floatval (preg_replace("/[-]?[^-0-9\.]/", "", $row[16])) 数字已导入,但不包括负数。我只得到正数 输出总是 2564.30 不幸的是总是没有负号 我不熟悉正则表达式 更新 抱歉,这些变体都不起作
floatval (preg_replace("/[-]?[^-0-9\.]/", "", $row[16]))
数字已导入,但不包括负数。我只得到正数
输出总是
2564.30
不幸的是总是没有负号
我不熟悉正则表达式
更新
抱歉,这些变体都不起作用
这是Excel中的数字:
在mysql中:
在mysql数据库中,格式为:float(12,2)
下面是import.php中的代码:
您可以使用
preg_replace(“~^-\K|[^-\d.]~”,“,$row[16]”)
看
细节
^-\K
-匹配字符串开头的-
,并忽略匹配项
|
-或
[^-\d.]
-除-
以外的任何字符,`数字和点
见a:
$strs=['2564.30','-2564.30'];
打印(预替换(“~^-\K.[^-\d.]~”,“$strs”);
//=>数组([0]=>2564.30[1]=>2564.30)
试试这个:“/[^-0-9.]/”对于regex作为使用正则表达式的替代方法,您还可以使用PHP的NumberFormatter
类
$formatter=newnumberformatter(“de-de”,NumberFormatter::DECIMAL);
$formatter->parse(“2.564,30”);//给出了2564.3
$formatter->parse(“-2.564,30”);//给出-2564.3
由于NumberFormatter
是PHP的Intl
(=国际化)扩展的一部分,它可能已经安装/启用,也可能尚未安装/启用,具体取决于您的PHP版本
如果无法随时提供,请参阅:
有关NumberFormat
本身,请参阅:
可能相关:您还尝试了哪些解决问题的方法?这看起来是学习TDD的好时机:收集测试用例,编写单元测试以构建“解析器”。我的答案至少不起作用,因为你给出了错误的数字格式——你在原始帖子中给出的是“2564.30”(英文数字格式),屏幕截图(2.817,42)中显示的是德语数字格式。我已经更新了,所以它可以处理后者。请再次编辑您的帖子,使其显示您在Excel文件中实际使用的数字格式,以便提供答案的人有机会调整他们的解决方案。