我收到一堆电子邮件,我在程序中将其作为文字阅读,并且都有以下电话号码:
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
但它根本不起作用
答案 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图书馆。
您可能会发现两个有用的功能
答案 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";
}
}
答案 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];
是一个数组。