如何在仅接受的移动电话号码中 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>
答案 0 :(得分:2)
试试这个:
if (preg_match("/^\+(09|63)-?[\d]{9}$/m", $mobile)) {
// valid mobile number
echo $mobile;
}
答案 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
演示
如果你真的需要你所说的话,你需要做一个更大的“或”陈述。像这样:
^((?: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";
}