我需要一种从帖子中提取手机号码的方法。
葡萄牙移动以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代码的例子吗?
发布于 2014-06-06 00:02:33
如果您可以相当肯定地确定张贴在该板上的数字是3组( ### ######)或9组(#########),甚至3+6 (### #######),并且保证这些数字以91236开头,那么我建议如下:
(9[1236]\d) ?(\d{3}) ?(\d{3})或者稍微详细一点:
(9[1236][0-9]) ?([0-9]{3}) ?([0-9]{3})示例:http://regex101.com/r/fP8tK3
它查找一个91236、另一个数字和一个可选的空格,然后查找任意3位数字、另一个可选空间和另外3个数字。
发布于 2014-06-06 00:02:17
对乔纳森·库恩的建议的修改。
假设您的$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,9999999,999-999-999,999/ 999 /999这样的号码。
现在可以使用preg_match函数检索结果。
发布于 2014-06-06 00:03:47
好的,这就是我所做的,我只接受与91/92/93/96相结合的数字,而且它只接受数字,所以如果他们尝试输入一个键,它就不会接受。
/^([9][1236])[0-9]*$/Regex Bellow允许空白(根据编辑的答案编辑)
/^([9][1236\s])[0-9\s]*$/https://stackoverflow.com/questions/24071924
复制相似问题