我写了一个简单的正则表达式来匹配以下条件的手机号码:
这是我尝试的内容:
/^((\+91)|0)?[987]\d{9}$/
这几乎适用于所有情况,但它将09811325760
之类的移动电话标记为错误。这是为什么?
echo preg_match('/^((\+91)|0)?[987]\d{9}$/', 09811325760);
0
答案 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