Preg_matching电子邮件和寻找特定文本

时间:2018-05-18 12:51:32

标签: php regex preg-match

我收到一堆电子邮件,我在程序中将其作为文字阅读,并且都有以下电话号码:

var entry = new Xamarin.Forms.Entry {
    Text = "Xamarin.Forms.Entry element",
    FontFamily = "Forms9PatchDemo.Resources.Fonts.Pacifico.ttf"
};
entry.Effects.Add(Effect.Resolve("Forms9Patch.CustomFontEffect"));

var label = new Forms9Patch.Label
{
    Text = "Custom Font Text",
    FontFamily = "Forms9PatchDemo.Resources.Fonts.Pacifico.ttf"
}

我如何找到它们并将其保存到变量中?

现在我这样做:

+370 655 54298
+37065782505
37069788505
865782825
65782825
(686) 51852

但它根本不起作用

4 个答案:

答案 0 :(得分:0)

我建议删除' +'(',')',' '并测试它是否为ctype_digit

删除所有字符并测试是否为数字,这假设结果是电话号码,如果你在电子邮件地址上运行此结果将是假的

 var_dump(ctype_digit(str_replace([' ', '+', '(', ')'], '', '(686) 51852')));
  

<强> TRUE

 var_dump(ctype_digit(str_replace([' ', '+', '(', ')'], '', 'r@pm.mr')));
  

<强> FALSE

答案 1 :(得分:0)

查看“libphonenumber”Google图书馆。

您可能会发现两个有用的功能

  • isPossibleNumber - 通过仅使用长度信息快速猜测数字是否是可能的语音,比完全验证快得多。
  • isValidNumber - 使用长度和前缀信息完全验证区域的电话号码。

答案 2 :(得分:0)

这应该有效https://regex101.com/r/E2PzRN/2

#\+?\(?\d+\)?\s?\d+\s?\d+#

<?php

$regex = '#\+?\(?\d+\)?\s?\d+\s?\d+#';
$x = [
    '+370 655 54298',
    '+37065782505',
    '37069788505',
    '865782825',
    'hjtgfjtdfjtgdfjt',
    '65782825',
    '(686) 51852',    
];

foreach ($x as $y) {
    if (preg_match($regex, $y, $match)) {
        echo $match[0] . "\n";
    }
}

在此处查看https://3v4l.org/6AlQa

答案 3 :(得分:0)

我们在这里区分了3种电话号码。

第一种是这一种:

sudo apt-get update

此处,开头+37065782505 37069788505 865782825 65782825 是可选的。因此,我们认为这些数字的最小值为7位。

因此获得的正则表达式

+

第二种是这一种:

(\+?[0-9]{7,})

这里我们有一个第一个块,包括+370 655 54298 后跟2到6位数字,然后是其他几个2到6位数的块,用空格分隔。

因此获得的正则表达式

+

最后一种是这一种:

(\+[0-9]{2,6}(\s[0-9]{2,6})+)

这是第一个由2到6位括号括起来的数字块,然后是其他几个2到6位的数字,用空格分隔。

因此获得的正则表达式

(686) 51852

因此,完整的提取代码是

(\([0-9]{2,6}\)(\s[0-9]{2,6})+)

其中preg_match_all("#(\+?[0-9]{7,})|(\+[0-9]{2,6}(\s[0-9]{2,6})+)|(\([0-9]{2,6}\)(\s[0-9]{2,6})+)#",$text,$out); $found = $out[0]; 是一个数组。