如何使用正则表达式替换多模式,保留手机号+号同时移除空格
手机号格式处理调整方案
你当前代码的核心问题是正则表达式写错了:匹配非数字字符的元字符应为\D,你现有代码里写的是普通大写字母D,仅能匹配字符D,自然无法识别并删除空格。
修正后的代码如下:
String flattenPhoneNumber(String phoneStr) { return phoneStr.replaceAllMapped(RegExp(r'^(\+)|\D'), (Match m) { return m[0] == "+" ? "+" : ""; }); }
代码说明
- 正则
r'^(\+)|\D'分为两部分:^(\+)匹配字符串开头的+号,命中后会保留该字符\D匹配所有非数字字符,包含空格、括号、横杠等其他非法字符,命中后全部替换为空
- 输入示例
+41 000 0000 000处理后输出为+410000000000,完全符合需求。
如果想要更易读的写法,也可以用以下实现:
String flattenPhoneNumber(String phoneStr) { if (phoneStr.startsWith('+')) { return '+' + phoneStr.substring(1).replaceAll(RegExp(r'\D'), ''); } return phoneStr.replaceAll(RegExp(r'\D'), ''); }
内容的提问来源于stack exchange,提问作者mafortis
相关产品推荐
相关产品推荐

