我有一个正则表达式,它将获取格式为+91-9544xxxxxx
的所有手机号码。
但是在我的PHP字符串中,我可能有+91 9544x XXXXX
或919544X XXXXX
或9544-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);
答案 0 :(得分:1)
如果您想选择允许空格或连字符,则可以将\d
写为[ -]*\d
。另外,如果字符集中存在-
,也不必转义[\-]
,就像在您的示例中看到的那样,您只想允许空格而不是连字符,我正在将[ -]
修改为{{ 1}}。另外,您应该使用开始/结束^
和$
锚点来避免部分匹配文本,并且可以在此正则表达式上使用
^(?:(?:\+|0{0,2})91(\s*[ -]\s*)?|[0]?)?[6789](?:[ -]*\d){9}$