Dart如何将逗号添加到字符串编号

时间:2015-08-11 00:25:27

标签: regex string dart masking

我正在尝试改编: Insert commas into number string 在飞镖工作,但没有运气。

其中任何一个都不起作用:

print("1000200".replaceAllMapped(new RegExp(r'/(\d)(?=(\d{3})+$)'), (match m) => "${m},"));
print("1000300".replaceAll(new RegExp(r'/\d{1,3}(?=(\d{3})+(?!\d))/g'), (match m) => "$m,"));

是否有更简单/有效的方式将逗号添加到字符串编号?

3 个答案:

答案 0 :(得分:6)

你只是忘了把第一个数字带到组中。使用这个简短的:

'12345kWh'.replaceAllMapped(new RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'), (Match m) => '${m[1]},')

查看可读版本。在表达式的最后一部分,我添加了对包括字符串结尾在内的任何非数字字符的检查,因此您可以使用' 12瓦特'太

RegExp reg = new RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))');
Function mathFunc = (Match match) => '${match[1]},';

List<String> tests = [
  '0',
  '10',
  '123',
  '1230',
  '12300',
  '123040',
  '12k',
  '12 ',
];

tests.forEach((String test) {
  String result = test.replaceAllMapped(reg, mathFunc);
  print('$test -> $result');
});

完美无缺:

0 -> 0
10 -> 10
123 -> 123
1230 -> 1,230
12300 -> 12,300
123040 -> 123,040
12k -> 12k
12  -> 12 

答案 1 :(得分:2)

尝试以下正则表达式:(\d{1,3})(?=(\d{3})+$)

这将提供两个反向引用,并使用它们替换您的号码,如$1,$2,,将添加逗号,它们应该是。

答案 2 :(得分:0)

import 'package:intl/intl.dart';

var f = NumberFormat("###,###.0#", "en_US");
print(f.format(int.parse("1000300")));

打印 1,000,300.0 检查飞镖的 NumberFormat here

格式被指定为使用 ICU 格式模式子集的模式。

  • 0 一位数
  • # 一个数字,如果为零则省略
  • 。十进制分隔符
  • - 减号
  • ,分组分隔符
  • E 分隔尾数和指数
  • + - 在指数之前,表示它应该以加号为前缀。
  • % - 在前缀或后缀中,乘以 100 并显示为百分比
  • ‰ (\u2030) 在前缀或后缀中,乘以 1000 并显示为千位
  • ¤ (\u00A4) 货币符号,替换为货币名称
  • ' 用于引用特殊字符
  • ;用于分隔正负模式(如果两者都存在)
相关问题