正则表达式从php字符串中获取带有空格的手机号码

时间:2019-03-30 08:51:09

标签: php regex

我有一个正则表达式,它将获取格式为+91-9544xxxxxx的所有手机号码。

但是在我的PHP字符串中,我可能有+91 9544x XXXXX919544X XXXXX9544-xxx-xxx之类的数字

如何使用正则表达式获取这些内容?

+91 countrycode
Mobile numbers are 10 digit long : +91-9876543210

EX:如果字符串包含91,则除空格之外的下10个数字为数字,则将其视为数字。或者,如果字符串包含95440,后跟空格和5个数字,则它也是一个手机号码。或者如果是9544-xxx-xxx,那么这也是一个数字。

我的正则表达式(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[6789]\d{9}

我尝试了(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[6789]\d\s{9},但是我什么也没得到。

preg_match_all("/(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[6789]\d\s{9}/", $words, $num);

1 个答案:

答案 0 :(得分:1)

如果您想选择允许空格或连字符,则可以将\d写为[ -]*\d。另外,如果字符集中存在-,也不必转义[\-],就像在您的示例中看到的那样,您只想允许空格而不是连字符,我正在将[ -]修改为{{ 1}}。另外,您应该使用开始/结束^$锚点来避免部分匹配文本,并且可以在此正则表达式上使用

^(?:(?:\+|0{0,2})91(\s*[ -]\s*)?|[0]?)?[6789](?:[ -]*\d){9}$

Demo