如何使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";
}