如何使用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.SalarayMethodTemplateMethodModelEx

【讨论】:

【参考方案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中自定义字符串格式化的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Drupal 视图块中自定义 HTML 结构

如何在freemarker中自定义数字格式?

如何在 Chart Js 中自定义工具提示?

如何使用 Storybook 6 在 Vuetify 中自定义主题?

如何在logback.xml中自定义动态属性

数据绑定期间如何在datagridview中自定义格式数据