移动电话号码正则表达不按预期工作

时间:2016-03-14 09:29:46

标签: php regex

我写了一个简单的正则表达式来匹配以下条件的手机号码:

  • 可选择以+91或0
  • 开头
  • 其次是9,8或7。
  • 后跟九位数字

这是我尝试的内容:

/^((\+91)|0)?[987]\d{9}$/

这几乎适用于所有情况,但它将09811325760之类的移动电话标记为错误。这是为什么?

echo preg_match('/^((\+91)|0)?[987]\d{9}$/', 09811325760);
0

2 个答案:

答案 0 :(得分:1)

所以在这里回答你的问题,你的号码是由于前导0被解释为八进制数:http://php.net/manual/en/language.types.integer.php

(另外:由于8和9是无效的八进制数,你的数字也会被切断)

因此,您必须在代码中将数字用作字符串,例如

echo preg_match('/^((\+91)|0)?[987]\d{9}$/', "09811325760");

在PHP 7中,此行为也已更改:http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.integers.invalid-octals现在您收到语法错误,因此您不必在Stack Overflow上提出问题。

答案 1 :(得分:1)

请参阅下面的代码,它将支持更多格式,例如支持 - ,.作为分隔符和你的问题

((\+91)|0)?[987]\d{2}[-.]?\d{3}[-.]?\d{4}\b