我目前有以下正则表达式
(?:(?<=^)|(?<=\s))(?:\+62|08)\S+\b
问题是它无法找到像这样的文本
0823 2371 2318
要么
+62812 2712 2819
基本上08或+62之后的数字可以是0-9或单个空格或点或_的数字我也需要限制它需要找到10个或更多字符
你可以用
(?:\+62|08)[\s._-]?(?=[\d\s._-]{8})\d+(?:[\s._-]\d+)*\b
细节
(?:\+62|08)
- +62
或08
[\s._-]?
- 一个空白,.
,_
或-
(?=[\d\s._-]{8})
- 当前位置右侧必须有8位/空格/点/连字符或下划线\d+
- 1+位数(?:[\s._-]\d+)*
- 零个或多个重复的空格/点/下划线/连字符然后1+个数字\b
- 词边界。如果您需要将其限制为仅匹配仅10位数或更多位的子串,请将(?=[\d\s._-]{8})
前瞻替换为(?=(?:[\s._-]*\d){8})
,请参阅this regex demo,或使用(?:\+62|08)(?:[\s._-]*\d){8,}\b
regex。
This RegEx将输入的电话号码分为三组,它可能与输入字符串中所需的模式匹配:
(\+62|08)([0-9]+)(\s[0-9]{4})+
如果您愿意,您可以简单地将除+62
或08
之外的其他边界添加到这些组中。
编辑:我不确定这是否会覆盖您的输入样本。您可以使用RegEx(例如this one)修改它:
(\+62|08)([0-9\.\-\s\_]{3,14})