如何编写正则表达式排除国家码与手机号之间的空格实现正确分组
手机号拆分正则修复方案
问题根因
原有正则((\D?[0-9]{3})(\D?\s?[0-9]{7,8}))的问题在于,国家码与后续手机号之间的分隔符(空格、非数字字符)被写在了第二个捕获分组的规则范围内,因此分隔符会被一同捕获到第二个分组中。
修复后正则
(\+\d{3})(?:\D*\s*)?(\d{7,8})
规则说明
- 第一个捕获组
(\+\d{3}):严格匹配+加三位数字的国家码格式,完全符合要求的+xyz分组规则 - 中间的
(?:\D*\s*)?为非捕获组(开头加?:表示该组不会生成独立的捕获结果),用于匹配国家码和后续手机号之间任意数量的非数字、空格字符,这部分内容不会被计入任何捕获分组 - 第二个捕获组
(\d{7,8}):仅捕获后续的7-8位纯数字,不会混入空格等分隔符
测试用例匹配结果
针对你提供的测试字符串"+347 56887364 +37256887364 +33359835647",匹配结果如下:
- 第一组:
+347,第二组:56887364 - 第一组:
+372,第二组:56887364 - 第一组:
+333,第二组:59835647
内容的提问来源于stack exchange,提问作者artn_01
相关产品推荐
相关产品推荐

