PHP preg_match()中的手机号码


PHP preg_match() in mobile number

如何使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>

try this:

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

试试这个正则表达式:

/^(?: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开头,所以验证特定的序列对于检测有效的手机号码更好。然而,我刚刚读到菲律宾

手机区号是三位数长,总是以数字9,虽然最近新的区号已经发布了8作为起始数字,特别是对于VOIP电话号码。

希望对您有所帮助。我认为你可以做得更短。

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