我需要一种从帖子中提取手机号码的方法。
葡萄牙手机以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代码好吗?
答案 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]*$/