如何去除价格末尾的,00或.00?技术实现方案求助
解决价格末尾
,00/.00的去除问题 嘿,我来帮你搞定这个价格格式化的困扰!先看你遇到的问题,你之前用的正则逻辑不对,所以才得不到想要的结果,咱们一步步来解决:
为什么你的正则没起作用?
你写的preg_replace("/[^(0-9)\.\,(0-9)]/", '', $text),这个正则的意思是过滤掉所有不是数字、点、逗号的字符,它根本没针对末尾的,00或.00做处理,自然达不到你想要的效果。而且这里的括号是多余的,等价于/[^0-9\.,]/,只会去掉非数字/点/逗号的内容,所以才会出现不符合预期的结果。
问题1:去除价格末尾的,00 或 .00
我们需要精准匹配字符串末尾的,00或者.00,然后替换为空。用这个正则就可以:
// 处理输入1:100.000,00 $input1 = "100.000,00"; $output1 = preg_replace("/[,\\.]00$/", "", $input1); echo $output1; // 输出:100.000 // 处理输入2:100.000.00 $input2 = "100.000.00"; $output2 = preg_replace("/[,\\.]00$/", "", $input2); echo $output2; // 输出:100.000
正则解释:
[,\\.]:匹配逗号(,)或者点(.),注意点在正则里是特殊字符,需要用反斜杠转义,而PHP字符串里反斜杠也要转义,所以写\\.00:匹配紧跟的两个0$:表示匹配字符串的结尾,确保只替换末尾的目标内容
问题2:只去除价格末尾的,00
如果只需要去掉末尾的,00,不用管.00,那正则更简单,只匹配末尾的,00即可:
// 处理输入1:100.000,00 $input1 = "100.000,00"; $output1 = preg_replace("/,00$/", "", $input1); echo $output1; // 输出:100.000 // 处理输入2:100.000.00 $input2 = "100.000.00"; $output2 = preg_replace("/,00$/", "", $input2); echo $output2; // 输出:100.000.00(因为末尾是.00,不会被替换)
这样就完全符合你的需求啦!
内容的提问来源于stack exchange,提问作者rhog23
相关产品推荐
相关产品推荐

