将千位分隔符添加到任何数字,即使它包含特殊字符
Posted
技术标签:
【中文标题】将千位分隔符添加到任何数字,即使它包含特殊字符【英文标题】:Add Thousand separator to any number even if it contains special characters 【发布时间】:2015-10-12 06:33:35 【问题描述】:我有一个挪威价格格式的网站,因此产品价格显示为1000,-
。
这是一个基于 Magento 的站点,版本 ce-1.9.2.1。
现在我想通过使用number_format
函数或正则表达式在该价格中添加千位分隔符(很可能是空格,但可以是任何字符),以保持其格式,以最好的方式保持完整性(如1 000,-
、1 000 000,-
等。 )。
有人有什么建议吗?
【问题讨论】:
【参考方案1】:在preg_replace
中使用环视你可以做到这一点:
$str = preg_replace('/\..*$(*SKIP)(*F)|(?<=\d)(?=(?:\d3)+(?!\d))/', ' ', $str);
\..*$(*SKIP)(*F)
将忽略/跳过 DOT
之后的部分进行此转换。
RegEx Demo
【讨论】:
您的正则表达式几乎可以工作,但它忽略了第一次出现的 '.'小数点分隔符,你能不能更新它,让它找到'.'后不放千位分隔符? 所以一个例子是输入:1000123.45678
,你想要1 000 123.45678
作为输出?
没错,我不希望千位分隔符出现在小数分隔符之后,因为它无关紧要。
谢谢男人,一个很好的回答,你是一个救生员。对此答案 +1。【参考方案2】:
根据我对 google 的 5 分钟研究,the formal currency format for Norwegian Krone 是 #.###,##
。
此格式与您建议的格式之间的唯一区别是克朗分隔符是“”而不是“
.
”,并且“,00
”的特殊值 øre 被替换为“ ,-
"。
基于该观察,我将简单地运行以下代码,并在正式定义中给出格式正确的值:
// expects "1.234,00" returns "1 234,-"
// "1.234.567,00" ==> "1 234 567,-"
// 5,50 ==> 5,50
function kroneDisplayFormat($formalFormat)
$intermediate = str_replace(".", " "); // replace . separator with ' ' (space)
if( endsWith( $intermediate, ",00"))
// special display case ",00" ==> ",-"
$final = str_replace(",00", ",-");
else
$final = $intermediate
return $final
【讨论】:
以上是关于将千位分隔符添加到任何数字,即使它包含特殊字符的主要内容,如果未能解决你的问题,请参考以下文章