将千位分隔符添加到任何数字,即使它包含特殊字符

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

【讨论】:

以上是关于将千位分隔符添加到任何数字,即使它包含特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

打印数字时添加千位分隔符[重复]

十进制字符串与千位分隔符?

JS从入门到放弃,千位分隔符

当某些数字包含逗号作为千位分隔符时如何读取数据?

如何读取包含千位分隔符和零的特殊处理(在 R 中)的 .csv 数据?

添加千位分隔符