修改正则表达式,以便它找到空间并设置最小长度限制

问题描述 投票:2回答:2

我目前有以下正则表达式

(?:(?<=^)|(?<=\s))(?:\+62|08)\S+\b

问题是它无法找到像这样的文本

0823 2371 2318

要么

+62812 2712 2819

基本上08或+62之后的数字可以是0-9或单个空格或点或_的数字我也需要限制它需要找到10个或更多字符

regex sublimetext2
2个回答
3
投票

你可以用

(?:\+62|08)[\s._-]?(?=[\d\s._-]{8})\d+(?:[\s._-]\d+)*\b

regex demo

细节

  • (?:\+62|08) - +6208
  • [\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


0
投票

This RegEx将输入的电话号码分为三组,它可能与输入字符串中所需的模式匹配:

(\+62|08)([0-9]+)(\s[0-9]{4})+

enter image description here

如果您愿意,您可以简单地将除+6208之外的其他边界添加到这些组中。


编辑:我不确定这是否会覆盖您的输入样本。您可以使用RegEx(例如this one)修改它:

(\+62|08)([0-9\.\-\s\_]{3,14})

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.