PHP preg_match()在手机号码

时间:2014-03-16 17:13:53

标签: php regex

如何在仅接受的移动电话号码中 preg_match()

开始时,

+ ”,“ 63 ”,“ +63 ”,“ 09

和“ - ”之间可以放在数字之间吗?

这个数字应该只包含1“ + ”并且在开头。

- ”应放在数字之间的任何位置,但只能放置一次。

09,63和+ 63的限制? 09年,

只有完全11位数,包括09。

在63,只有完全12位是可能的,包括63.

在+63上,只有确切的13位,包括+63。

示例:

639164455539 ​​

639164455539 ​​

09164455539 ​​

0916-4455539 ​​

这是我的代码:

form name="myform" id="myform" method="post" action="index.php">
<input type="text" id="mobile" name="mobile" placeholder="Input mobile number"> <br /><br /><br />
        <?php
        $mobile = $_POST['mobile'];
        if (isset($_POST['submit_btn'])) {
            $submit = $_POST['submit_btn'];
            if (preg_match("/^(09|63)[\d]{9}$/m", $mobile)) {
                // valid mobile number
                echo $mobile;
            }
            else{

                echo "ERROR!";
            }
        }
    ?>
<br />
<input type="submit" id="submit_btn" name="submit_btn" value="Submit!">
</form>

3 个答案:

答案 0 :(得分:2)

试试这个:

 if (preg_match("/^\+(09|63)-?[\d]{9}$/m", $mobile)) {
            // valid mobile number
            echo $mobile;
   }

Demo

答案 1 :(得分:0)

试试这个正则表达式:

/^(?:09|\+?63)(?:\d(?:-)?){9,10}$/m

它匹配更新的问题中的所有示例

请参阅http://regex101.com/r/bS0tW2

添加“最多一个连字符”的要求我们得到

/^(?:09|\+?63)(?!.*-.*-)(?:\d(?:-)?){9,10}$/m

前面的负面看法说“从这一点开始你不能匹配两个连字符”。

更新了演示: http://regex101.com/r/pZ4eJ6

最后 - 您对数字位数的要求,虽然不完全如您在评论中所述,但可能会遇到

/^(?:09|\+?639)(?!.*-.*-)(?:\d(?:-)?){9}$/m

实际上说:

(?:09|\+?639) - start with either 09 or (optional +)639
(?!.*-.*-)    - there may not be more than one hyphen in what follows
(?:\d(?:-)?){9} - there must be exactly 9 digits in what follows; don't count a (single) hyphen

http://regex101.com/r/zQ5lU8

演示

如果你真的需要你所说的话,你需要做一个更大的“或”陈述。像这样:

^((?:09)(?!.*-.*-)(?:\d(?:-)?){9}$|^\+?63(?!.*-.*-)(?:\d(?:-)?){10}$)

这基本上将表达式分为两部分:“一个以国际访问代码开头”,或“一个不支持”。我认为这不是更好,因为我非常确定您的“国际”手机号码始终以+639开头,因此验证特定序列更适合检测有效的手机号码。但是,菲律宾的I just read

  

手机区号长度为三位数,始终以   数字9,尽管最近发布了新的区号8   作为起始数字,特别是对于VOIP电话号码。

您可能需要在创建验证时考虑这一点......

答案 2 :(得分:0)

希望这会对你有所帮助。我想你可以做得更短。

$yournumber="+639164455539";
  if (preg_match_all("/(^\+?63(?!.*-.*-)(?!.*\+.*\+)(?:\d(?:-)?){10,11}$)|(^09(?!.*-.*-)(?!.*-.*-)(?:\d(?:-)?){9}$)/",$yournumber))
{
echo "Valid";
}
else
{
  echo "Invalid number";
}