工作解决方案(下面的答案)
$phones = [
"5141234567, 5144384062",
"608-909-5003 Home : 629-716-8085",
"Cell: 705-111-7699 workcell: 547-924-5097",
"729-242-1353; 718-251-0292",
"Call 555-1212 or 1-800-555-1212, 1 (949) 637 2826; +1 233 455 7878",
"6097999388 ext 128",
];
foreach ($phones as $phone) {
$phone = trim($phone);
$possibles = [];
preg_match_all("/(?:[+][0-9]+[ ]?)?[(]?\b0*[0-9]{3}[)]?(?:[ .-]?[0-9]){7}\b/", $phone, $matches);
echo $phone . ': ' . print_r($matches, true);
}
寻找正则表达式来获取带有空格连字符和括号的所有出现的数字。这些是用户输入的备注中的电话号码。无需寻找3位和4位数的组。
以下是一些应该匹配的示例。匹配任何匹配项,直到下一个词或;
或,
来自我们当前数据库的示例日志。这些中的每一个都作为一行一次处理。
()
的分机或少于7位的组可以忽略)+1 8142104482
应该匹配) 摘要因此,正则表达式应该帮助选择数字块(7位或更多位数),并在开头选择+ -
,space
,{{1}介于两者之间。
更新
对这个很好:
()
输出:
preg_match_all("/(\d+[\-\s]\d+)+/x",
"Call 555-1212 or 1-800-555-1212, 1 (949) 637 2826; +1 233 455 7878", $matches);
print_r($matches);
预期/必需
Array
(
[0] => Array
(
[0] => 555-1212
[1] => 1-800
[2] => 555-1212
[3] => 637 2826
[4] => 1 233
[5] => 455 7878
)
[1] => Array
(
[0] => 555-1212
[1] => 1-800
[2] => 555-1212
[3] => 637 2826
[4] => 1 233
[5] => 455 7878
)
)
答案 0 :(得分:1)
要匹配示例中的电话号码:
[+]?0*(?<=^|[+0\s])(?:(?:[0-9]{1,2}[ ]?)?[(]?[0-9]{3}[)]?(?:[ .-]?[0-9]){7})\b
在最后7个字符之前允许空格,点或短划线
因此,它允许(123) 123-4567
以及(123) 1-23 45 67
您可以对其进行测试here