PHP用正则匹配form表单中所有元素的类型和属性值实例代码
发布:smiling 来源: PHP粉丝网 添加日期:2018-08-03 17:04:40 浏览: 评论:0
最近工作中遇到一个需求,需要在正则匹配页面中,所有可能存在的 form 表单的元素,可能有 input,action,select,textarea等等所有可能的元素,本文给出一个代码示例。感兴趣的朋友们可以参考学习。
实例代码如下,假设页面 1.html 的网页源代码是:
- <!DOCTYPE html>
- <html>
- <head>
- <metacharsetmetacharset="utf-8"/>
- <title>一个含有 form 表单的登录注册页面</title>
- <styletypestyletype="text/<a href="http://www.111cn.net/cssdiv/css.html" class="anchor" target="_blank">css</a>">
- *{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>
- <formactionformaction="register.php"method="post">
- <inputtypeinputtype="hidden"name="cookie"value="SJKjki80KJ8jkl2"/>
- <tablecellpaddingtablecellpadding="0"cellspacing="0"class="tbl">
- <tr>
- <thcolspanthcolspan="2">注册</th>
- </tr>
- <tr>
- <td>昵称:</td>
- <td><inputtypeinputtype="text"name='name'required=""/></td>
- </tr>
- <tr>
- <td>密码:</td>
- <td><inputnameinputname="password"type="password"required="required"/></td>
- </tr>
- <tr>
- <td>年龄:</td>
- <td><inputnameinputname="age"value="22"required="required"></td>
- </tr>
- <tr>
- <td>性别:</td>
- <td>
- <inputtypeinputtype="radio"name="sex"value="1"/> 男
- <inputtypeinputtype="radio"name="sex"value="0"/> 女
- </td>
- </tr>
- <tr>
- <td>地区:</td>
- <td>
- <selectnameselectname="area">
- <optionvalueoptionvalue="jiangsu">江苏</option>
- <optionvalueoptionvalue="shandong">山东</option>
- <optionvalueoptionvalue="fujian">福建</option>
- <optionvalueoptionvalue="beijing">北京</option>
- </select>
- </td>
- </tr>
- <tr>
- <td>城市:</td>
- <td>
- <selectnameselectname="city">
- <optionvalueoptionvalue="qingdao">青岛</option>
- <optionvalueoptionvalue="longyan">龙岩</option>
- <optionvalueoptionvalue="beijing">北京</option>
- <optionvalueoptionvalue="wuxi">无锡</option>
- </select>
- </td>
- </tr>
- <tr>
- <td>兴趣:</td>
- <td>
- <inputtypeinputtype="checkbox"name="xingqu[]"value="1"> 篮球
- <inputtypeinputtype="checkbox"name="xingqu[]"value="2"> 足球
- <inputtypeinputtype="checkbox"name="xingqu[]"value="3"> 跳高
- </td>
- </tr>
- <tr>
- <td>照片:</td>
- <td><inputtypeinputtype="file"name="photo"/></td>
- </tr>
- <tr>
- <td>简介:</td>
- <td><textareanametextareaname="summary"required="">这里填入个人简介</textarea></td>
- </tr>
- <tr>
- <td>备注:</td>
- <td><textareanametextareaname="remark"required="">1</textarea></td>
- </tr>
- <tr>
- <tdcolspantdcolspan="2"><inputtypeinputtype="submit"name="register"value="注册"></td>
- </tr>
- </table>
- </form>
- <formactionformaction="login.php"method="post">
- <tablecellpaddingtablecellpadding="0"cellspacing="0"class="tbl">
- <tr>
- <thcolspanthcolspan="2">登录</th>
- </tr>
- <tr>
- <td>昵称:</td>
- <td><inputtypeinputtype="text"name='name'required="required"/></td>
- </tr>
- <tr>
- <td>密码:</td>
- <td><inputnameinputname="password"type="password"required="required"/></td>
- </tr>
- <tr>
- <td>备注:</td>
- <td><textareanametextareaname="remark"required="">2</textarea></td>
- </tr>
- <tr>
- <tdcolspantdcolspan="2"><inputtypeinputtype="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(emptyempty($arr_form))
- {
- echo'抱歉!未匹配到 form 表单元素';
- }else
- {
- foreach($arr_formas$k=>$v)
- {
- echo'form'.($k+1).':<br />';
- if(!emptyempty($v['action']))
- {
- echo'----action:<br />';
- echo'--------'.$v['action'].'<br />';
- }
- if(!emptyempty($v['method']))
- {
- echo'----method:<br />';
- echo'--------'.$v['method'].'<br />';
- }
- if(!emptyempty($v['inputs']))
- {
- echo'----inputs:<br />';
- foreach($v['inputs']as$key=>$value)
- {
- echo'--------name:'.$value['name'].' type:'.$value['type'].' value:'.$value['value'].'<br />';
- }
- }
- if(!emptyempty($v['textarea']))
- {
- echo'----textarea:<br />';
- foreach($v['textarea']as$key=>$value)
- {
- echo'--------name:'.$value['name'].' value:'.$value['value'].'<br />';
- }
- }
- if(!emptyempty($v['select']))
- {
- echo'----select:<br />';
- for($m= 0;$m<count($v['select']);$m++)
- {
- echo'--------name:'.$v['select'][$m]['name'].'<br />';
- if(!emptyempty($v['select'][$m]['option']))
- {
- foreach($v['select'][$m]['option']as$key=>$value)
- {
- echo'------------value:'.$value.'<br />';
- }
- }
- }
- }
- }
- }
- // 获取页面中的 form 表单中的所有 input、textarea 元素中 name、value、type 等属性值
- functionget_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 标签
- functionregular_form_tags($string)
- {
- $pattern='/<form(.*?)>(.*?)<\/form>/si';
- preg_match_all($pattern,$string,$result);
- return$result;
- }
- // 正则匹配 form 标签的 action 属性值
- functionregular_form_action($string)
- {
- $pattern='/action[\s]*?=[\s]*?([\'\"])(.*?)\1/';
- if(preg_match($pattern,$string,$result))
- {
- return$result[2];
- }
- returnnull;
- }
- // 正则匹配 form 标签的 method 属性值
- functionregular_form_method($string)
- {
- $pattern='/method[\s]*?=[\s]*?([\'\"])(.*?)\1/';
- if(preg_match($pattern,$string,$result))
- {
- return$result[2];
- }
- returnnull;
- }
- // 正则匹配 input 标签
- functionregular_input_tags($string)
- {
- $pattern='/<input.*?\/?>/si';
- if(preg_match_all($pattern,$string,$result))
- {
- return$result;
- }
- returnnull;
- }
- // 正则匹配 input 标签的 name 属性值
- functionregular_input_name($string)
- {
- $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/';
- if(preg_match($pattern,$string,$result))
- {
- return$result[2];
- }
- returnnull;
- }
- // 正则匹配 input 标签的 type 属性值
- functionregular_input_type($string)
- {
- $pattern='/type[\s]*?=[\s]*?([\'\"])(.*?)\1/';
- if(preg_match($pattern,$string,$result))
- {
- return$result[2];
- }
- returnnull;
- }
- // 正则匹配 input 标签的 value 属性值
- functionregular_input_value($string)
- {
- $pattern='/value[\s]*?=[\s]*?([\'\"])(.*?)\1/';
- if(preg_match($pattern,$string,$result))
- {
- return$result[2];
- }
- returnnull;
- }
- // 正则匹配 textarea 标签
- functionregular_textarea_tags($string)
- {
- $pattern='/(<textarea.*?>.*?<\/textarea[\s]*?>)/si';
- if(preg_match_all($pattern,$string,$result))
- {
- return$result[1];
- }
- returnnull;
- }
- // 正则匹配 textarea 标签的 name 属性值
- functionregular_textarea_name($string)
- {
- $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/si';
- if(preg_match($pattern,$string,$result))
- {
- return$result[2];
- }
- returnnull;
- }
- // 正则匹配 textarea 标签的 name 属性值
- functionregular_textarea_value($string)
- {
- $pattern='/<textarea.*?>(.*?)<\/textarea>/si';
- if(preg_match($pattern,$string,$result))
- {
- return$result[1];
- }
- returnnull;
- }
- // 正则匹配 select 标签
- functionregular_select_tags($string)
- {
- $pattern='/<select(.*?)>(.*?)<\/select[\s]*?>/si';
- preg_match_all($pattern,$string,$result);
- return$result;
- }
- // 正则匹配 select 标签的 option 子标签
- functionregular_option_tags($string)
- {
- $pattern='/<option(.*?)>.*?<\/option[\s]*?>/si';
- preg_match_all($pattern,$string,$result);
- return$result;
- }
- // 正则匹配 select 标签的 name 属性值
- functionregular_select_name($string)
- {
- $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/si';
- if(preg_match($pattern,$string,$result))
- {
- return$result[2];
- }
- returnnull;
- }
- // 正则匹配 select 的子标签 option 的 value 属性值
- functionregular_option_value($string)
- {
- $pattern='/value[\s]*?=[\s]*?([\'\"])(.*?)\1/si';
- if(preg_match($pattern,$string,$result))
- {
- return$result[2];
- }
- returnnull;
- }
这样我们就可以实现获取任意一个页面中的 form 表单所有存在的元素啦!
Tags: 正则 表单 实例
相关文章
- ·老生常谈php 正则中的i,m,s,x,e分别表示什么(2018-08-03)
- ·php用正则判断是否为数字的方法(2019-11-11)
- ·php正则的内容总结(详细)(2019-12-25)
- ·php正则表达式是什么?(代码实例)(2020-02-25)
- ·php用正则表达式匹配URL的简单方法(2020-06-23)
- ·PHP 正则判断中文UTF-8或GBK的思路及具体实现(2020-07-06)
- ·php中常见的sql攻击正则表达式汇总(2021-04-24)
- ·PHP中一些可以替代正则表达式函数的字符串操作函数(2021-04-26)
- ·UTF-8正则表达式如何匹配汉字(2021-06-15)
- ·php用户注册信息验证正则表达式(2021-06-26)
- ·php 转换表单textarea换行符代码(2013-11-29)
- ·php接收表单提交数据实例详解(2014-03-03)
- ·php 获取checkbox表单取值程序代码(2014-03-05)
- ·PHP $_GET 获取 HTML表单(Form) 或url数据(2014-03-28)
- ·php教程之表单提交实例(2014-03-31)
- ·php 获取表单数据的实现方法(2014-05-21)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)