在一个表单里POST过来几个手机号码,在接收页里用正则对号码进行检查是否有效。奇怪的是,竟然只对最后一个有效果。
反之,改用GET则没问题,百思不得其解,期待高人指点。 表单来的号码是换行方式的,如:
13926588888
13316888868
11926888888
13510688888
13802288888也就是说,按上面的示例手机号$_POST过来后它只能处理到最后一个号码即13802288888(本应是打印出4个号码的,因只有第三个号码是不符合规则的)。附上完整测试代码,请有环境的朋友帮忙检测一下,谢谢。<?php
//接收
if($_GET['action']=='send') {
$mobile = explode("\n",$_POST['mobile']);
//print_r($mobile); foreach ($mobile as $mobile_only){
if(preg_match("/^1(3|5|8)\d{9}$/",$mobile_only)) {
//处理
echo $mobile_only;
}
}
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
</head>
<body><table width="98%" cellpadding="0" cellspacing="0" align="center">
<form method="post" name="formsms" action="?action=send">
<tr>
<td align="left">
<p>接收号码:一行一个手机号码.</p><textarea name="mobile" cols="25" rows="16"></textarea></td><td align="left">
<p>信息内容:</p><textarea name="sms_content" cols="42" rows="13"></textarea></td>
</tr><tr>
<td colspan="2"><input type="submit" value="提 交" /></td>
</tr>
</form>
</table></body>
</html>
反之,改用GET则没问题,百思不得其解,期待高人指点。 表单来的号码是换行方式的,如:
13926588888
13316888868
11926888888
13510688888
13802288888也就是说,按上面的示例手机号$_POST过来后它只能处理到最后一个号码即13802288888(本应是打印出4个号码的,因只有第三个号码是不符合规则的)。附上完整测试代码,请有环境的朋友帮忙检测一下,谢谢。<?php
//接收
if($_GET['action']=='send') {
$mobile = explode("\n",$_POST['mobile']);
//print_r($mobile); foreach ($mobile as $mobile_only){
if(preg_match("/^1(3|5|8)\d{9}$/",$mobile_only)) {
//处理
echo $mobile_only;
}
}
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
</head>
<body><table width="98%" cellpadding="0" cellspacing="0" align="center">
<form method="post" name="formsms" action="?action=send">
<tr>
<td align="left">
<p>接收号码:一行一个手机号码.</p><textarea name="mobile" cols="25" rows="16"></textarea></td><td align="left">
<p>信息内容:</p><textarea name="sms_content" cols="42" rows="13"></textarea></td>
</tr><tr>
<td colspan="2"><input type="submit" value="提 交" /></td>
</tr>
</form>
</table></body>
</html>
换成:$mobile = preg_split("/\s+/",$_POST['mobile']);
每行号码后面实际上还有\r,所以正则中数字后的$不匹配。
或者只改preg_match("/^1(3|5|8)\d{9}\r?$/",$mobile_only)
这个是按楼上的测试结果 少了希望打出的 138开头的号码。。不知道怎么回事。是正则没写对吗? \d是什么意思呢?
这样是报错的
preg_match()里面用trim($mobile_only) 我这里打印不出来 我用$mobile_only= trim($mobile_only);
if(preg_match("/^1(3|5|8)\d{9}\r$/",$mobile_only)) {
//处理
echo $mobile_only;
}
也不行 你那可以吗?
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
改为
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
改成这样preg_match("/^1[3|5|8]\d{8}/",$mobile_only)
if(preg_match("/^1(3|5|8)\d{9}$/",$mobile_only))
改成这样preg_match("/^1[3|5|8]\d{8}/",$mobile_only)
这个方法貌似不行
感谢你的热情,CSDN因有你们这些可爱的人而热闹...顺便回你,trim是去空格,7楼改的正则是不正确的,手机应为11位。