Regex匹配电话号码(使用PHP preg_replace)第2部分



所以我一直在PHP中使用preg_replace来匹配和替换电话号码。我的目标很简单:我想匹配所有包含空格、数字、短划线和+号的字符序列,最小长度为6,因此字符序列为+120 123 4444555将匹配。

$subject的字符串长度最多可以是1000个字符,如果这有区别的话。

我想出了这个正则表达式:

preg_replace('/[0-9+-]{6,}/','[hiddend]','+12 0 123 4444555',-1,$count(;我的期望是我得到一串

[隐藏]我得到的是

[隐藏]44555我确信这是显而易见的,但我似乎不明白为什么整个序列不匹配。

我在上面测试过https://www.functions-online.com/preg_replace.html还尝试了一些建议的Regex,如:[0-9\h+-]{6,}或preg_replace('/+?\d(?:[\s+((-]*\d({5,}/','[hiddend]','+12 0 123 4444555’(;

但两者仍然只替换了部分电话号码。

(上一篇帖子,其中只有部分问题得到了回答,该帖子已关闭:Regex匹配电话号码(带有PHP preg_replace((

由于字符串包含非ASCII空白字符,因此需要使用

preg_replace('/[0-9s+-]{6,}/u', ' [hidden] ', '+12 0 123 44 44 555', -1, $count);

请参阅PHP演示。

正则空格被s简写字符类取代,u标志用于确保正则表达式引擎将字符串作为Unicode字符串而非字节字符串处理,并且s现在匹配任何Unicode空白字符。

最新更新