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

时间:2014-06-05 23:36:56

标签: php regex mobile

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

葡萄牙手机以91或92或93或96开头。现在我有preg_match(#^9[1236][0-9]{7})

问题有时出现在他们发布的信息上:

  

(2个数字在一起,或者某些数字之间有空格)

     

示例1:文本文本919 919 919文本

     

示例2:文本文本919919919文本

     

示例3:919919919 929929929文本

     

示例4:文本文本文本文本919 919 919 929999999

     

示例5:文本3832文本1文本919 999 999 929 999 999文本

     

示例6:文本3832

     

示例7:文本123文本007文本91 9919919

     

text 1 text 919999999 929999999 text

     

正则表达式匹配这些示例,请注意示例5和6,这使得这更复杂

     

葡萄牙移动电话号码以91/92/93/96开头

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

有人可以向我展示一个正则表达式的例子吗?示例PHP代码好吗?

3 个答案:

答案 0 :(得分:1)

如果您可以确定发布到该板的数字是3组(### ### ###)或长期9(#########)或甚至3 + 6(### #######),保证数字以9 [1236]开头,我建议:

(9[1236]\d) ?(\d{3}) ?(\d{3})

或稍微冗长:

(9[1236][0-9]) ?([0-9]{3}) ?([0-9]{3})

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

它会查找9 [1236],另一个数字,以及可选的空格,然后是3位数,另一个可选空格和3位数。

答案 1 :(得分:0)

Jonathan Kuhn对该建议的修改。

说$ number变量的值是“aaaaaa 92 999 9999 aaaaaa”

拳头你的模式需要匹配数字前的所有非数字字符并剥离它们。

$pattern = '/\D+/';

这匹配任何非数字字符(\ D),而+表示匹配这些字符中的一个或多个。

使用preg_replace,您可以这样做:

preg_replace ($pattern,'',$number);

这应该删除第一个数字之前的所有字符。 要删除右侧的非数字字符,您必须稍微修改模式:

$pattern = '/\D+$/';

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

编辑: 现在要匹配示例5和6,我们需要一个像这样的正则表达式:

/(\d{3}[ //-]*){3}/g

查找数字,如999999999,999 999 999,999-999-999,999/999/999。

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

答案 2 :(得分:0)

好的,这就是我所做的只是接受91/92/93/96的号码,只接受号码,所以如果他们尝试输入一个键就不会接受。

/^([9][1236])[0-9]*$/

正则表达式Bellow允许空格(根据编辑的答案编辑)

/^([9][1236\s])[0-9\s]*$/