首页 > 解决方案 > 如何使用 Match,以重新格式化电话号码为例。(在 dart 中捕获 RegEx 组。)

问题描述

我有一个正则表达式

RegExp(r'^(\d{0,3})(\d{0,3})(\d{0,4})');

我想格式化这个:1234567890到这个:(123) 456-7890

请注意:最初这是另一个问题。( How to split a string on range ) 但是作者编辑了它,我想保存原意和问题。我希望它对编程的初学者,尤其是飞镖的学习者有用。

标签: regexflutterdart

解决方案


捕获组是一种将多个字符视为一个单元的方法。

var value1 = "1234567890000";
var value2 = "123";
var value3 = "";

List<String> formatPhoneNumber(String value) {
  var regExp = RegExp(r'^(\d{0,3})(\d{0,3})(\d{0,4})');
  var matches = regExp.firstMatch(value);

  var ver1 = '(${matches.group(1)}) ${matches.group(2)}-${matches.group(3)}';
  var ver2 = '';
  if (matches.group(1).isNotEmpty) {
    ver2 += '(${matches.group(1)})';
  }
  if (matches.group(2).isNotEmpty) {
    ver2 += ' ${matches.group(2)}';
  }
  if (matches.group(3).isNotEmpty) {
    ver2 += '-${matches.group(3)}';
  }
  return ['ver1: $ver1', 'ver2: $ver2'];
}


print(formatPhoneNumber(value1)); //[ver1: (123) 456-7890, ver2: (123) 456-7890]
print(formatPhoneNumber(value2)); //[ver1: (123) -, ver2: (123)]
print(formatPhoneNumber(value3)); //[ver1: (123) -, ver2: (123)]

如果您需要电话号码的输入掩码,请使用包:https ://pub.dev/packages/mask_text_input_formatter


推荐阅读