Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 捕获手机号码_Php_Regex - Fatal编程技术网

Php 捕获手机号码

Php 捕获手机号码,php,regex,Php,Regex,手机号码长度为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 Te

手机号码长度为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、破折号和空格字符组成的所有数字。

/\b(?07[\d\s]+?)(?=[^\d\s])/
/\b(?<myNumber>07[\d\s]+?)(?=[^\d\s])/
编辑:如果可以说“数字中可能有空格,但最多2个”,则可以添加伪验证长度的范围(考虑尾随空格):

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

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

您可能正在查找以
07
开头的regexp,而不是9个数字+一些空格。。。您可以构建任意一个regexp,该regexp将吃掉它找到的所有东西(包含空格和
\d
(十进制数)

或构建只匹配上述格式的real regexp:

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

所有这些都是

中的
$pattern
的参数。我使用的是PCRE类型的正则表达式。您希望捕获出现空格、句点和逗号的可能性。因此,您可以将它们匹配起来,并确定空格和单词的边界

\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(07(\d+\s*)*)(\.\124;,\ 124;\ s(\w))
\s=
()=匹配组,也用于编号的替换表达式
\d=数字
\.=文字周期
|=逻辑或。所以A或B是(A | B)
\w=单词字符,任意字母字符
我用替换表达式\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

“Text Text 07751 123 456 ext Text”
我们在7:00醒来,然后我们试着给他打了7次电话,这个号码:…,还可以吗?
如何确定这个号码是11位数字?@user791022
+
=
达到内存限制(至少应该匹配几千字节),这意味着
0700000000000000000000000….
:)第二个指定:07,多于3个数字,多于
空格,多于3个数字,多于3个空格,多于3个数字
"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