查找字符串中的电话号码

发布于 2024-11-29 10:56:33 字数 674 浏览 1 评论 0原文

在 PHP 中,我正在搜索特定文本中的电话号码。 我使用 explode() 将文本分成不同的部分,并使用我正在搜索的城市的区号作为分隔符。问题在于,包含与区号相同号码的电话号码无法正常返回。

例如:

"foofoo 010-1234567 barbar" 分为 "foofoo ""-1234567 barbar"

"foofoo 010- 1230107 barbar" 分为 "foofoo ""-123""7野蛮人”

我可以使用第一个用区号重建电话号码,但第二个当然会出错......

我想我需要一个正则表达式来使用某种机制来分割文本,以分割在短字符串上,而不是 explode() ,但我不知道该怎么做。

有什么想法或更好的方法来搜索文本中的电话号码吗?

更新: 格式不一致,因此寻找连字符并不能解决问题。有些电话号码的区号和号码之间有空格,有些有钩子,有些什么都没有,等等。荷兰电话号码的区号为 2,3 或 4 个数字,通常总共有 10 个数字。

In PHP I'm searching for phonenumbers in a certain text.
I use explode() to divide the text in different parts,using the area code of the city I'm searching for as the delimiter. The problem is that phonenumbers that include the same numbers as the area-code are not returned well.

For example:

"foofoo 010-1234567 barbar" splits into "foofoo " and "-1234567 barbar"

but

"foofoo 010-1230107 barbar" splits into "foofoo ", "-123" and "7 barbar" !

I can use the first one to reconstruct the phonenummer with the areacode, but the second goes wrong of course...

I guess I need a regular expression to split the text with some kind of mechanism to not split on short strings, instead of explode() , but I don't know how to do it.

Any ideas or a better way to search for phonenumbers in a text ?

UPDATE:
The format is NOT consistent, so looking for the hyphen is no solution. Some phone numbers have spaces between the area code and number, some have hooks, some have nothing, etc. Dutch phonenumbers have an areacode of 2,3 or 4 numbers and are usually 10 numbers in total.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

东京女 2024-12-06 10:56:33

要查找类似以下的电话号码:

  • 010-1234010
  • 010 1234010
  • 010 123 4010
  • 0101234010
  • 010-010-0100

请尝试以下操作:

$text = 'foofoo 010-1234010 barbar 010 1234010 foofoo ';
$text .= ' 010 123 4010 barbar 0101234010 foofoo 010-010-0100';

$matches = array();

// returns all results in array $matches
preg_match_all('/[0-9]{3}[\-][0-9]{6}|[0-9]{3}[\s][0-9]{6}|[0-9]{3}[\s][0-9]{3}[\s][0-9]{4}|[0-9]{9}|[0-9]{3}[\-][0-9]{3}[\-][0-9]{4}/', $text, $matches);
$matches = $matches[0];

var_dump($matches);

To find phone numbers like:

  • 010-1234010
  • 010 1234010
  • 010 123 4010
  • 0101234010
  • 010-010-0100

Try this:

$text = 'foofoo 010-1234010 barbar 010 1234010 foofoo ';
$text .= ' 010 123 4010 barbar 0101234010 foofoo 010-010-0100';

$matches = array();

// returns all results in array $matches
preg_match_all('/[0-9]{3}[\-][0-9]{6}|[0-9]{3}[\s][0-9]{6}|[0-9]{3}[\s][0-9]{3}[\s][0-9]{4}|[0-9]{9}|[0-9]{3}[\-][0-9]{3}[\-][0-9]{4}/', $text, $matches);
$matches = $matches[0];

var_dump($matches);
狂之美人 2024-12-06 10:56:33

您可以使用正则表达式来匹配电话号码。有很多很多方法可以给这只特定的猫剥皮(这里可能有很多相同的问题),一个超级基本的例子可能如下所示。

$subject = "foofoo 010-1230107 barbar 010-1234567";
preg_match_all('/\b010-\d+/', $subject, $matches);
$numbers = $matches[0];
print_r($numbers);

上面将输出 $numbers 数组的内容。

Array
(
    [0] => 010-1230107
    [1] => 010-1234567
)

You could use a regular expression to match the phone numbers. There are many, many ways to skin this particular cat (and likely many identical questions here on SO) a super-basic example might look like the following.

$subject = "foofoo 010-1230107 barbar 010-1234567";
preg_match_all('/\b010-\d+/', $subject, $matches);
$numbers = $matches[0];
print_r($numbers);

The above would output the contents of the $numbers array.

Array
(
    [0] => 010-1230107
    [1] => 010-1234567
)
半城柳色半声笛 2024-12-06 10:56:33

如果删除所有非数字字符,则只剩下电话号码。然后,如果您愿意,您可以将该字符串解析为 ###-###-####

$phone = preg_replace('/\D/', '', 'Some test with 123-456-7890 that phone number');
//$phone is now 1234567890
echo substr($phone, 0, 3);//123
echo subsr($phone, 3, 3);//456
echo substr($phone, 6);//7890

不确定这是否是您正在寻找的。

If you delete all of the non numeric characters, you will only be left with the phone number. You can then take that string and parse it into ###-###-#### if you wish.

$phone = preg_replace('/\D/', '', 'Some test with 123-456-7890 that phone number');
//$phone is now 1234567890
echo substr($phone, 0, 3);//123
echo subsr($phone, 3, 3);//456
echo substr($phone, 6);//7890

Not sure if that is what you are looking for or not.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文