繁体   English   中英

PHP中的正则表达式,使用一个Regex提取电话/手机号码的所有可能组合

[英]Regular Expression in PHP to extract all possible combination of phone/mobile numbers using one Regex

我正在使用php并想从字符串中提取电话/手机号码,我的字符串具有多种格式的电话号码,例如

$str = '(123) 456-7890 or (123)456-7890 and 1234567890 test "123.456.7890" another test "123 456 7890"';

我写了一个RE

$phoneMatches = '';
$str = '(123) 456-7890 or (123)456-7890 or 1234567890 or "123.456.7890" or "123 456 7890"';
$phonePattern = '/\b[0-9]{3}\s*[-]?\s*[0-9]{3}\s*[-]?\s*[0-9]{4}\b/';
preg_match_all($phonePattern, $str, $phoneMatches);
echo "<pre>";
print_r($phoneMatches);
exit;

但这给了我这样的输出,

Array
(
    [0] => Array
        (
            [0] => 1234567890
            [1] => 123 456 7890
        )
)

仅意味着两个,但是我只希望使用一个正则表达式就可以从文本字符串中获得电话号码和手机号码的所有可能组合。

谢谢

我知道我来晚了,并且不确定这是否是您想要的,但是我想出了以下解决方案:

[+()\d].*?\d{4}(?!\d)

演示: regex101.com

说明:

  • [+()\\d] -我们首先匹配任何可能代表电话号码开头的内容。
  • .*?\\d{4} -然后我们匹配所有内容(使用惰性量词),直到达到四个结尾数字。 请注意:我认为这是一个规则,但可能并不总是适用。 然后,您需要修改正则表达式以包括其他情况。
  • (?!\\d) -这是一个否定的超前查询,表示我们不希望任何匹配后跟数字字符。 我用它来避免半场比赛。

另一个观察结果是该正则表达式不会验证任何电话号码。 比赛之间您可能会有任何事情,主要是因为这部分: .*?\\d{4} 这将取决于您打算使用哪种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM