捕获手机号码


Capture Mobile number

手机号码长11个字符,号码始终以07开头。

我想从字符串中捕获手机号码。。下面的几个例子:

$String1 = "Text Text Text 07751 123 456 Text Text";
$String2 = "Text Text Text 07751 123456 Text Text"
$String3 = "Text Text Text 07751 123456. Text Text"
$String4 = "Text Text Text 07751123456, Text Text"

如何在PHP中完成?

您可以使用剥离所有非数字字符

function remove_non_numeric($string) {
   return preg_replace('/'D/', '', $string)
}

通过该检查,它从07等开始。

试试这个:

$numbers = array();
preg_match_all('/[0-9''- ]{6,}/', $string, $numbers);
print_r($numbers);

它应该匹配由五个(您可以调整)或更多0-9、短划线和空格组成的所有数字。

您可能正在寻找以07开头的regexp,它有9个数字+一些空格。。。您可以构建任意一个regexp,它只会吃掉它找到的所有内容(包含空格和'd(十进制数字)。

~07['d's]+~

或者构建真正的regexp,它将只匹配提到的格式:

~07'd{3}'s*'d{3}'s*'d{3}~

所有这些都是preg_match_all()$pattern的自变量

/'b(?<myNumber>07['d's]+?)(?=[^'d's])/

编辑:如果你可以说"数字中可能有空格,但最多2个",你可以添加伪验证长度的范围(考虑尾部空格):

/'b(?<myNumber>07['d's]{9,12})(?=[^'d's])/ 

"单词边界,后面是一系列以07(myNumber)开头的空格/数字,总共最多有14个字符(11+3个空格),但在其末尾向前看,会看到一个非数字、非空格(数据中的一个字母或一个点),这样我们就知道我们得到了整个数字"。(然后从结果中删除空格)

我使用的是PCRE类型的RegExs。您希望捕捉空格、句点和逗号可能出现的可能性。因此,你可以将它们匹配起来,也可以划分空间和单词的边界。

's(07('d+'s*)*)('.|,|'s('w))
's = <space>
() = match group, also used for the numbered replacement expression
'd = digit
'. = literal period
| = logical or. So A or B is (A|B)
'w = word character, any alpha character

我用''s''1''s 的替换表达式对此进行了测试

结果

"Text Text Text 07751 123 456 ext Text"; <---replaced. See the missing "T"
"Text Text Text 07751 123 456 Text Text"; <--original
"Text Text Text 07751 123456 ext Text" <---replaced. See the missing "T"
"Text Text Text 07751 123456 Text Text" <--original
"Text Text Text 07751 123456  Text Text" <---replaced. See the missing "."
"Text Text Text 07751 123456. Text Text" <--original
"Text Text Text 07751123456  Text Text" <---replaced. See the missing ","
"Text Text Text 07751123456, Text Text" <--original
"Text Text Text 07751 123 456 ext Text"; <---replaced. See the missing "T"
"Text Text Text 07751 123 456 Text Text"; <--original