PHP用正则匹配form表单中所有元素的类型和属性值实例代码


Posted in PHP onFebruary 28, 2017

前言

最近工作中遇到一个需求,需要在正则匹配页面中,所有可能存在的 form 表单的元素,可能有 input,action,select,textarea等等所有可能的元素,本文给出一个代码示例。感兴趣的朋友们可以参考学习。

实例代码如下

假设页面 1.html 的网页源代码是:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8" />
 <title>一个含有 form 表单的登录注册页面</title>
 <style type="text/css">
 *{padding:0;margin:0;font-size:12px;}
 .tbl{margin:20px auto;border:1px solid #AACCEE;padding:30px 30px;border-radius:4px;}
 .tbl td{line-height:30px;vertical-align:top;}
 textarea{resize:none;height:60px;}
 </style>
 </head>
 <body>
 <form action="register.php" method="post">
 <input type="hidden" name="cookie" value="SJKjki80KJ8jkl2" />
 <table cellpadding="0" cellspacing="0" class="tbl"> 
 <tr>
 <th colspan="2">注册</th>
 </tr>
 <tr>
 <td>昵称:</td>
 <td><input type="text" name = 'name' required="" /></td>
 </tr>
 <tr>
 <td>密码:</td>
 <td><input name="password" type="password" required="required" /></td>
 </tr>
 <tr>
 <td>年龄:</td>
 <td><input name="age" value="22" required="required" ></td>
 </tr>
 <tr>
 <td>性别:</td>
 <td>
 <input type="radio" name="sex" value="1" /> 男
 <input type="radio" name="sex" value="0" /> 女
 </td>
 </tr>
 <tr>
 <td>地区:</td>
 <td>
 <select name="area">
 <option value="jiangsu">江苏</option>
 <option value="shandong">山东</option>
 <option value="fujian">福建</option>
 <option value="beijing">北京</option>
 </select>
 </td>
 </tr>
 <tr>
 <td>城市:</td>
 <td>
 <select name="city">
 <option value="qingdao">青岛</option>
 <option value="longyan">龙岩</option>
 <option value="beijing">北京</option>
 <option value="wuxi">无锡</option>
 </select>
 </td>
 </tr>
 <tr>
 <td>兴趣:</td>
 <td>
 <input type="checkbox" name="xingqu[]" value="1" > 篮球
 <input type="checkbox" name="xingqu[]" value="2"> 足球
 <input type="checkbox" name="xingqu[]" value="3" > 跳高
 </td>
 </tr>
 <tr>
 <td>照片:</td>
 <td><input type="file" name="photo" /></td>
 </tr>
 <tr>
 <td>简介:</td>
 <td><textarea name="summary" required="">这里填入个人简介</textarea></td>
 </tr>
 <tr>
 <td>备注:</td>
 <td><textarea name="remark" required="">1</textarea ></td>
 </tr>
 <tr>
 <td colspan="2"><input type="submit" name="register" value="注册"></td>
 </tr>
 </table> 
 </form>
 <form action="login.php" method="post">
 <table cellpadding="0" cellspacing="0" class="tbl">
 <tr>
 <th colspan="2">登录</th>
 </tr>
 <tr>
 <td>昵称:</td>
 <td><input type="text" name = 'name' required="required" /></td>
 </tr>
 <tr>
 <td>密码:</td>
 <td><input name="password" type="password" required="required" /></td>
 </tr>
 <tr>
 <td>备注:</td>
 <td><textarea name="remark" required="">2</textarea></td>
 </tr> 
 <tr>
 <td colspan="2"><input type="submit" name="register" value="登录"></td>
 </tr>
 </table> 
 </form> 
 </body>
</html>

我们需要获取到这个页面所有 form 表单,及每个 form 表单所包含的各类表单元素,例如:input,select,textarea等等。

匹配的源代码是:

$content = file_get_contents('1.html');
$arr_form = get_page_form_data($content);
if(empty($arr_form))
{
 echo '抱歉!未匹配到 form 表单元素';
}else
{
 foreach($arr_form as $k => $v)
 {
 echo 'form'.($k+1).':<br />';
 if(!empty($v['action']))
 {
 echo '----action:<br />';
 echo '--------'.$v['action'].'<br />';
 }
 if(!empty($v['method']))
 {
 echo '----method:<br />';
 echo '--------'.$v['method'].'<br />';
 } 
 if(!empty($v['inputs']))
 {
 echo '----inputs:<br />';
 foreach($v['inputs'] as $key => $value)
 {
 echo '--------name:'.$value['name'].' type:'.$value['type'].' value:'.$value['value'].'<br />';
 }
 } 
 if(!empty($v['textarea']))
 {
 echo '----textarea:<br />';
 foreach($v['textarea'] as $key => $value)
 {
 echo '--------name:'.$value['name'].' value:'.$value['value'].'<br />';
 }
 } 
 if(!empty($v['select']))
 {
 echo '----select:<br />';
 for($m = 0;$m < count($v['select']);$m ++)
 {
 echo '--------name:'.$v['select'][$m]['name'].'<br />';
 if(!empty($v['select'][$m]['option']))
 {
 foreach ($v['select'][$m]['option'] as $key => $value) 
 {
 echo '------------value:'.$value.'<br />';
 }
 }
 }
 }
 }
}
// 获取页面中的 form 表单中的所有 input、textarea 元素中 name、value、type 等属性值
function get_page_form_data($content)
{
 $arr_form = array();
 $form = regular_form_tags($content);
 for($i = 0;$i < count($form[0]);$i ++)
 {
 $arr_form[$i]['action'] = regular_form_action($form[1][$i]);
 $arr_form[$i]['method'] = regular_form_method($form[1][$i]);
 $input = regular_input_tags($form[2][$i]);
 for($j = 0;$j < count($input[0]);$j ++)
 {
 $arr_form[$i]['inputs'][$j]['name'] = regular_input_name($input[0][$j]);
 $arr_form[$i]['inputs'][$j]['type'] = regular_input_type($input[0][$j]);
 $arr_form[$i]['inputs'][$j]['value'] = regular_input_value($input[0][$j]);
 }
 $textarea = regular_textarea_tags($form[2][$i]);
 for($k = 0;$k < count($textarea);$k ++)
 {
 $arr_form[$i]['textarea'][$k]['name'] = regular_textarea_name($textarea[$k]);
 $arr_form[$i]['textarea'][$k]['value'] = regular_textarea_value($textarea[$k]);
 }
 $select = regular_select_tags($form[2][$i]);
 for($l = 0;$l < count($select[0]);$l ++)
 {
 $arr_form[$i]['select'][$l]['name'] = regular_select_name($select[1][$l]);
 $option = regular_option_tags($select[2][$l]);
 for($n = 0;$n < count($option[$l]);$n ++)
 {
 $arr_form[$i]['select'][$l]['option'][$n] = regular_option_value($option[$l][$n]);
 } 
 }
 }
 return $arr_form;
}
// 正则匹配 form 标签
function regular_form_tags($string)
{ 
 $pattern = '/<form(.*?)>(.*?)<\/form>/si'; 
 preg_match_all($pattern,$string,$result);
 return $result;
}
// 正则匹配 form 标签的 action 属性值
function regular_form_action($string)
{
 $pattern = '/action[\s]*?=[\s]*?([\'\"])(.*?)\1/';
 if(preg_match($pattern,$string,$result))
 {
 return $result[2];
 }
 return null;
}
// 正则匹配 form 标签的 method 属性值
function regular_form_method($string)
{
 $pattern = '/method[\s]*?=[\s]*?([\'\"])(.*?)\1/';
 if(preg_match($pattern,$string,$result))
 {
 return $result[2];
 }
 return null;
}
// 正则匹配 input 标签
function regular_input_tags($string)
{
 $pattern = '/<input.*?\/?>/si'; 
 if(preg_match_all($pattern,$string,$result))
 {
 return $result; 
 }
 return null;
}
// 正则匹配 input 标签的 name 属性值
function regular_input_name($string)
{
 $pattern = '/name[\s]*?=[\s]*?([\'\"])(.*?)\1/';
 if(preg_match($pattern,$string,$result))
 {
 return $result[2];
 }
 return null;
 
}
// 正则匹配 input 标签的 type 属性值
function regular_input_type($string)
{
 $pattern = '/type[\s]*?=[\s]*?([\'\"])(.*?)\1/';
 if(preg_match($pattern,$string,$result))
 {
 return $result[2];
 }
 return null;
}
// 正则匹配 input 标签的 value 属性值
function regular_input_value($string)
{
 $pattern = '/value[\s]*?=[\s]*?([\'\"])(.*?)\1/';
 if(preg_match($pattern,$string,$result))
 {
 return $result[2];
 }
 return null; 
}
// 正则匹配 textarea 标签
function regular_textarea_tags($string)
{
 $pattern = '/(<textarea.*?>.*?<\/textarea[\s]*?>)/si'; 
 if(preg_match_all($pattern,$string,$result))
 {
 return $result[1];
 }
 return null;
}
// 正则匹配 textarea 标签的 name 属性值
function regular_textarea_name($string)
{
 $pattern = '/name[\s]*?=[\s]*?([\'\"])(.*?)\1/si'; 
 if(preg_match($pattern,$string,$result))
 {
 return $result[2];
 }
 return null;
}
// 正则匹配 textarea 标签的 name 属性值
function regular_textarea_value($string)
{
 $pattern = '/<textarea.*?>(.*?)<\/textarea>/si'; 
 if(preg_match($pattern,$string,$result))
 {
 return $result[1];
 }
 return null;
}
// 正则匹配 select 标签
function regular_select_tags($string)
{
 $pattern = '/<select(.*?)>(.*?)<\/select[\s]*?>/si';
 preg_match_all($pattern,$string,$result);
 return $result;
}
// 正则匹配 select 标签的 option 子标签
function regular_option_tags($string)
{
 $pattern = '/<option(.*?)>.*?<\/option[\s]*?>/si';
 preg_match_all($pattern,$string,$result);
 return $result; 
}
// 正则匹配 select 标签的 name 属性值
function regular_select_name($string)
{
 $pattern = '/name[\s]*?=[\s]*?([\'\"])(.*?)\1/si';
 if(preg_match($pattern,$string,$result))
 {
 return $result[2];
 }
 return null;
}
// 正则匹配 select 的子标签 option 的 value 属性值
function regular_option_value($string)
{
 $pattern = '/value[\s]*?=[\s]*?([\'\"])(.*?)\1/si';
 if(preg_match($pattern,$string,$result))
 {
 return $result[2];
 }
 return null;
}

运行效果如下图所示:

PHP用正则匹配form表单中所有元素的类型和属性值实例代码

PHP用正则匹配form表单中所有元素的类型和属性值实例代码

这样我们就可以实现获取任意一个页面中的 form 表单所有存在的元素啦!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用PHP能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
php自动获取目录下的模板的代码
Aug 08 PHP
PHP序列号生成函数和字符串替换函数代码
Jun 07 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
Jun 19 PHP
CodeIgniter中实现泛域名解析
Jul 19 PHP
跟我学Laravel之快速入门
Oct 15 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
php解析字符串里所有URL地址的方法
Apr 03 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
解决laravel 5.1报错:No supported encrypter found的办法
Jun 07 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
Feb 28 #PHP
PHP连接MYSQL数据库的3种常用方法
Feb 27 #PHP
php获取今日开始时间和结束时间的方法
Feb 27 #PHP
php+mysql+jquery实现日历签到功能
Feb 27 #PHP
php查找字符串中第一个非0的位置截取
Feb 27 #PHP
php实时倒计时功能实现方法详解
Feb 27 #PHP
php自定义截取中文字符串-utf8版
Feb 27 #PHP
You might like
PHP 字符串操作入门教程
2006/12/06 PHP
PHP学习 变量使用总结
2011/03/24 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
canvas的神奇用法
2017/02/03 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
python微信公众号开发简单流程
2018/03/23 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
python中K-means算法基础知识点
2021/01/25 Python
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
医院学雷锋活动策划方案
2014/02/15 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
企业新年寄语
2014/04/04 职场文书
挂靠协议书范本
2014/04/22 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
收银员岗位职责
2015/02/03 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python