regex - 如何使用 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 ) 但是作者编辑了它,我想保存原意和问题。我希望它对编程的初学者,尤其是飞镖的学习者有用。
解决方案
捕获组是一种将多个字符视为一个单元的方法。
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
推荐阅读
- java - 如何在 Android (Java) 中添加微调器验证
- r - 在R中给定行“匹配”的情况下创建具有平均列值的表
- javascript - 找不到隐含“任何”类型的模块的声明文件 - 在导入部分 CommonJS 模块时
- python - 'save() 禁止以防止由于未保存的相关对象导致数据丢失' 即使在保存父对象时
- python - 向列表中添加新项目?
- c# - WPF 问题仅在某些硬件配置上在辅助屏幕上创建窗口
- selenium - 如何从 div 标签中获取文本并在一行中打印
- angular - 无法正确设置 Angular PWA
- python-3.x - 内存高效的海量 http 请求
- python - 将音频文件转换为频谱图,然后将频谱图的数据保存到 txt 文件中