首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式提取所有存在的葡萄牙移动号码

正则表达式提取所有存在的葡萄牙移动号码
EN

Stack Overflow用户
提问于 2014-06-05 23:36:56
回答 3查看 3.8K关注 0票数 2

我需要一种从帖子中提取手机号码的方法。

葡萄牙移动以91、92、93或96开始。现在我有preg_match(#^9[1236][0-9]{7})了。

问题在于他们有时会以这样的方式发布这样的信息:

(两个数字合在一起,或其中一些数字之间有空格) Example1:文本919191919 Example2:文本919919919文本 Example3: 919919919 929929929文本 Example4:文本91919919 929999999 Example5:文本3832文本1文本919 999 999 999文本 Example6:文本3832 Example7:文本123文本007文本91 9919919 文本1文本919999999 929999999文本 为了匹配这些示例,请查看示例5和6,这使得这一过程更加复杂。 葡萄牙移动电话以91/92/93/96开始

我需要提取所有的匹配数字,并将所有匹配的array_push()放到一个数组中,然后array_unique,确保没有重复的数字。

有人能给我举一个这个正则表达式的例子和PHP代码的例子吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-06 00:02:33

如果您可以相当肯定地确定张贴在该板上的数字是3组( ### ######)或9组(#########),甚至3+6 (### #######),并且保证这些数字以91236开头,那么我建议如下:

代码语言:javascript
复制
(9[1236]\d) ?(\d{3}) ?(\d{3})

或者稍微详细一点:

代码语言:javascript
复制
(9[1236][0-9]) ?([0-9]{3}) ?([0-9]{3})

示例:http://regex101.com/r/fP8tK3

它查找一个91236、另一个数字和一个可选的空格,然后查找任意3位数字、另一个可选空间和另外3个数字。

票数 1
EN

Stack Overflow用户

发布于 2014-06-06 00:02:17

对乔纳森·库恩的建议的修改。

假设您的$number变量的值是"aaaaaa 92 999 9999 aaaaaa“

首先,你的模式需要在数字之前匹配所有的非数字字符,然后去掉它们。

代码语言:javascript
复制
$pattern = '/\D+/';

这将匹配任何非数字字符(\D),并且+意味着匹配这些字符中的一个或多个。

使用preg_replace,您可以这样做:

代码语言:javascript
复制
preg_replace ($pattern,'',$number);

这应该删除所有的字符,直到第一个数字。若要移除右边的非数字字符,您必须将模式稍微修改为:

代码语言:javascript
复制
$pattern = '/\D+$/';

我们在这里添加了美元符号,以匹配字符串的末尾。再次运行preg_replace会将非数字字符删除到电话号码的右侧。

编辑:现在为了匹配示例5和6,我们需要一个正则表达式,如下所示:

代码语言:javascript
复制
/(\d{3}[ //-]*){3}/g

找到999999999,9999999,999-999-999,999/ 999 /999这样的号码。

现在可以使用preg_match函数检索结果。

票数 0
EN

Stack Overflow用户

发布于 2014-06-06 00:03:47

好的,这就是我所做的,我只接受与91/92/93/96相结合的数字,而且它只接受数字,所以如果他们尝试输入一个键,它就不会接受。

代码语言:javascript
复制
/^([9][1236])[0-9]*$/

Regex Bellow允许空白(根据编辑的答案编辑)

代码语言:javascript
复制
/^([9][1236\s])[0-9\s]*$/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24071924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档