我正在使用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
)
)
表示只有两个,但我希望通过仅使用一个正则表达式从文本字符串中获得电话号码和手机号码的所有可能组合。
谢谢
发布于 2018-01-27 00:25:27
我知道我来晚了,我不确定这是不是你想要的,但我想出了这个解决方案:
[+()\d].*?\d{4}(?!\d)
Demonstration: regex101.com
说明:
[+()\d]
-我们首先匹配可能代表电话number..*?\d{4}
开头的任何东西-然后匹配任何东西(使用懒惰的量词),直到我们达到四个结束数字。只需注意:我认为这是一个规则,但它可能并不总是适用的。然后,您需要修改正则表达式以包含其他cases.(?!\d)
-这是一个负向先行,这意味着我们不想要任何后跟数字字符的匹配。我用这个来避免一些half-matches.另一个观察结果是,此正则表达式不验证任何电话号码。在两个匹配之间可以有任何东西,主要是因为这一部分:.*?\d{4}
。这将取决于您打算在什么情况下使用它。
https://stackoverflow.com/questions/40017496
复制相似问题