如何使用JS在HTML中自定义字符串格式化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用JS在HTML中自定义字符串格式化相关的知识,希望对你有一定的参考价值。
参考技术A Python中支持字符串格式化,其基本形式如下:?
1
2
3
4
str = "I'm %s, %s years old." % ('jack', 19)
print(str)
#结果:
I'm jack, 19 years old.
在javascript中虽没有类似的方法,但我们可以利用字符串的replace方法自定义字符串的格式化方法:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script>
$(function ()
/*自定义字符串格式化*/
String.prototype.Format = function (args)
/*this代表要调用Format方法的字符串*/
/*replace的第一个参数为正则表达式,g表示处理匹配到的所有字符串,在js中使用//包起来*/
/*replace的第二个参数为匹配字符串的处理,k1匹配结果包含,k2只保留内的内容*/
var temp = this.replace(/\(\w+)\/g, function (k1, k2)
console.log(k1, k2);
/*replace将匹配到的k2用参数args替换后赋给新变量temp*/
return args[k2];
);
/*自定义方法Format将格式化后的字符串返回*/
return temp;
;
</script>
如何在freemarker中自定义数字格式?
【中文标题】如何在freemarker中自定义数字格式?【英文标题】:How to customize number format in freemarker? 【发布时间】:2014-01-24 10:52:40 【问题描述】:我正在使用 freemarker 并尝试以这种格式显示数字:例如 $3,343,434.00
。这很容易通过使用$total?string.currency
来解决(假设“total”是某个数字)。
但是,当我有负数时,它会像这样显示它们:($343.34)
而不是:-$343.34
。我需要负号而不是括号。有没有办法可以自定义格式,以便它完成 string.currency
所做的所有事情,但替换负值行为?我对 freemarker 比较陌生,因此感谢您提供详细的回复!
【问题讨论】:
【参考方案1】:你也可以试试?string(",##0.00")
。但是在这种情况下,您需要显式添加 $
和 -
符号将在 $
之后,以防出现负数。
<#local total = 3343434/>
$ $total?string(",##0.00") //$ 3,343,434.00
<#local total = -3343434/>
$ $total?string(",##0.00") //$ -3,343,434.00
或者,如果你想要什么,你可以替换字符串。
<#local total = -3343434/>
<#local total = "$ " + total?string(",##0.00")/>
$total?replace('$ -','- $') //- $3,343,434.00
【讨论】:
【参考方案2】:更新:从 FreeMarker 2.3.24 开始,您可以定义命名的自定义数字格式,它可以是数字格式模式的别名(或者甚至是用 Java 实现的格式化程序,但这种灵活性水平是在这种情况下不需要)。因此,在 FreeMarker 配置中添加一个名为“money”的自定义数字格式作为 "¤,##0.00"
的别名,然后您可以编写类似 $total?string.@money
的内容。见:http://freemarker.org/docs/pgui_config_custom_formats.html
目前 FreeMarker 只使用 Java 平台的格式化工具,所以它只能这样配置(假设你想使用 ?string
和 ?string.somethingPredefiendHere
)。这并不多......但是,总的来说,Java平台提供的格式化类别无论如何都不够精细,我的意思是,您没有应用程序域类别,例如产品价格,薪水, 股票价格等。(这种需求在非货币数字中更为常见。)所以我认为,一般来说,你想制作一个格式化函数,你可以使用像$salary(someNumber)
,$price(someNumber)
,等等。这些功能可以在常见的#included
/#imported
模板中实现,如#function
或在Java 中使用#assign salary = 'com.example.SalarayMethod'?new()
代替#function
,其中com.example.SalarayMethod
是TemplateMethodModelEx
。
【讨论】:
【参考方案3】:如何获取您的号码的 mod,将其转换为所需的字符串格式,最后在最终字符串中添加一个“-”前缀。您只需两步即可保留默认格式。
【讨论】:
【参考方案4】:Freemarker 使用 Java 平台提供的货币格式。
它需要对 NumberFormat.getCurrencyInstance() 返回的 DecimalFormat 进行一些调整(调用 .currency 时会调用它)。你可以看到examples of it here。
但是,这表示您在 freemarker 中创建一个宏来调用它可能会更有效,该宏将处理您的特定格式。
很抱歉没有该宏的示例,但它是 freemarker 中宏的一个很好的入门,因为您只是在学习。
您可能会调查是否可以使用number formats 的公开配置提供自定义格式以满足您的需求。
【讨论】:
日期和数字格式最好在#function
-s 中完成,然后在#macro
-s 中完成,除非您的格式是 HTML 标记(颜色等)。【参考方案5】:
如果您想保持默认的货币格式(以防您需要使用“$”以外的语言环境),您可以像这样替换括号:
$transaction.amount?string.currency?replace("(","-")?replace(")","")
无论数字是负数还是正数,这都不会出错。
提示:在转换为货币格式之前,请确保该数字实际上是带有 ?number
指令的数字
【讨论】:
以上是关于如何使用JS在HTML中自定义字符串格式化的主要内容,如果未能解决你的问题,请参考以下文章