regexstringdartmasking

Dart how to add commas to a string number


I'm trying to adapt this: Insert commas into number string to work in dart, but no luck.

either one of these don't work:

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,"));

Is there a simpler/working way to add commas to a string number?


Solution

  • You just forgot get first digits into group. Use this short one:

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

    Look at the readable version. In last part of expression I added checking to any not digit char including string end so you can use it with '12 Watt' too.

    RegExp reg = RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))');
    String Function(Match) mathFunc = (Match match) => '${match[1]},';
    
    List<String> tests = [
      '0',
      '10',
      '123',
      '1230',
      '12300',
      '123040',
      '12k',
      '12 ',
    ];
    
    for (String test in tests) {    
      String result = test.replaceAllMapped(reg, mathFunc);
      print('$test -> $result');
    }
    

    It works perfectly:

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