当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2018-08-03 17:04:40 浏览: 评论:0 

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

实例代码如下,假设页面 1.html 的网页源代码是:

  1. <!DOCTYPE html> 
  2. <html> 
  3.  <head> 
  4.  <metacharsetmetacharset="utf-8"/> 
  5.  <title>一个含有 form 表单的登录注册页面</title> 
  6.  <styletypestyletype="text/<a href="http://www.111cn.net/cssdiv/css.html" class="anchor" target="_blank">css</a>"> 
  7.  *{padding:0;margin:0;font-size:12px;} 
  8.  .tbl{margin:20px auto;border:1px solid #AACCEE;padding:30px 30px;border-radius:4px;} 
  9.  .tbl td{line-height:30px;vertical-align:top;} 
  10.  textarea{resize:none;height:60px;} 
  11.  </style> 
  12.  </head> 
  13.  <body> 
  14.  <formactionformaction="register.php"method="post"> 
  15.  <inputtypeinputtype="hidden"name="cookie"value="SJKjki80KJ8jkl2"/> 
  16.  <tablecellpaddingtablecellpadding="0"cellspacing="0"class="tbl"> 
  17.  <tr> 
  18.  <thcolspanthcolspan="2">注册</th> 
  19.  </tr> 
  20.  <tr> 
  21.  <td>昵称:</td> 
  22.  <td><inputtypeinputtype="text"name='name'required=""/></td> 
  23.  </tr> 
  24.  <tr> 
  25.  <td>密码:</td> 
  26.  <td><inputnameinputname="password"type="password"required="required"/></td> 
  27.  </tr> 
  28.  <tr> 
  29.  <td>年龄:</td> 
  30.  <td><inputnameinputname="age"value="22"required="required"></td> 
  31.  </tr> 
  32.  <tr> 
  33.  <td>性别:</td> 
  34.  <td> 
  35.  <inputtypeinputtype="radio"name="sex"value="1"/> 男 
  36.  <inputtypeinputtype="radio"name="sex"value="0"/> 女 
  37.  </td> 
  38.  </tr> 
  39.  <tr> 
  40.  <td>地区:</td> 
  41.  <td> 
  42.  <selectnameselectname="area"> 
  43.  <optionvalueoptionvalue="jiangsu">江苏</option> 
  44.  <optionvalueoptionvalue="shandong">山东</option> 
  45.  <optionvalueoptionvalue="fujian">福建</option> 
  46.  <optionvalueoptionvalue="beijing">北京</option> 
  47.  </select> 
  48.  </td> 
  49.  </tr> 
  50.  <tr> 
  51.  <td>城市:</td> 
  52.  <td> 
  53.  <selectnameselectname="city"> 
  54.  <optionvalueoptionvalue="qingdao">青岛</option> 
  55.  <optionvalueoptionvalue="longyan">龙岩</option> 
  56.  <optionvalueoptionvalue="beijing">北京</option> 
  57.  <optionvalueoptionvalue="wuxi">无锡</option> 
  58.  </select> 
  59.  </td> 
  60.  </tr> 
  61.  <tr> 
  62.  <td>兴趣:</td> 
  63.  <td> 
  64.  <inputtypeinputtype="checkbox"name="xingqu[]"value="1"> 篮球 
  65.  <inputtypeinputtype="checkbox"name="xingqu[]"value="2"> 足球 
  66.  <inputtypeinputtype="checkbox"name="xingqu[]"value="3"> 跳高 
  67.  </td> 
  68.  </tr> 
  69.  <tr> 
  70.  <td>照片:</td> 
  71.  <td><inputtypeinputtype="file"name="photo"/></td> 
  72.  </tr> 
  73.  <tr> 
  74.  <td>简介:</td> 
  75.  <td><textareanametextareaname="summary"required="">这里填入个人简介</textarea></td> 
  76.  </tr> 
  77.  <tr> 
  78.  <td>备注:</td> 
  79.  <td><textareanametextareaname="remark"required="">1</textarea></td> 
  80.  </tr> 
  81.  <tr> 
  82.  <tdcolspantdcolspan="2"><inputtypeinputtype="submit"name="register"value="注册"></td> 
  83.  </tr> 
  84.  </table> 
  85.  </form> 
  86.  <formactionformaction="login.php"method="post"> 
  87.  <tablecellpaddingtablecellpadding="0"cellspacing="0"class="tbl"> 
  88.  <tr> 
  89.  <thcolspanthcolspan="2">登录</th> 
  90.  </tr> 
  91.  <tr> 
  92.  <td>昵称:</td> 
  93.  <td><inputtypeinputtype="text"name='name'required="required"/></td> 
  94.  </tr> 
  95.  <tr> 
  96.  <td>密码:</td> 
  97.  <td><inputnameinputname="password"type="password"required="required"/></td> 
  98.  </tr> 
  99.  <tr> 
  100.  <td>备注:</td> 
  101.  <td><textareanametextareaname="remark"required="">2</textarea></td> 
  102.  </tr> 
  103.  <tr> 
  104.  <tdcolspantdcolspan="2"><inputtypeinputtype="submit"name="register"value="登录"></td> 
  105.  </tr> 
  106.  </table> 
  107.  </form> 
  108.  </body> 
  109. </html> 

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

匹配的源代码是:

  1. $content=file_get_contents('1.html'); 
  2. $arr_form= get_page_form_data($content); 
  3. if(emptyempty($arr_form)) 
  4.  echo'抱歉!未匹配到 form 表单元素'
  5. }else 
  6.  foreach($arr_formas$k=>$v
  7.  { 
  8.  echo'form'.($k+1).':<br />'
  9.  if(!emptyempty($v['action'])) 
  10.  { 
  11.  echo'----action:<br />'
  12.  echo'--------'.$v['action'].'<br />'
  13.  } 
  14.  if(!emptyempty($v['method'])) 
  15.  { 
  16.  echo'----method:<br />'
  17.  echo'--------'.$v['method'].'<br />'
  18.  } 
  19.  if(!emptyempty($v['inputs'])) 
  20.  { 
  21.  echo'----inputs:<br />'
  22.  foreach($v['inputs']as$key=>$value
  23.  { 
  24.  echo'--------name:'.$value['name'].' type:'.$value['type'].' value:'.$value['value'].'<br />'
  25.  } 
  26.  } 
  27.  if(!emptyempty($v['textarea'])) 
  28.  { 
  29.  echo'----textarea:<br />'
  30.  foreach($v['textarea']as$key=>$value
  31.  { 
  32.  echo'--------name:'.$value['name'].' value:'.$value['value'].'<br />'
  33.  } 
  34.  } 
  35.  if(!emptyempty($v['select'])) 
  36.  { 
  37.  echo'----select:<br />'
  38.  for($m= 0;$m<count($v['select']);$m++) 
  39.  { 
  40.  echo'--------name:'.$v['select'][$m]['name'].'<br />'
  41.  if(!emptyempty($v['select'][$m]['option'])) 
  42.  { 
  43.  foreach($v['select'][$m]['option']as$key=>$value
  44.  { 
  45.  echo'------------value:'.$value.'<br />'
  46.  } 
  47.  } 
  48.  } 
  49.  } 
  50.  } 
  51. // 获取页面中的 form 表单中的所有 input、textarea 元素中 name、value、type 等属性值 
  52. functionget_page_form_data($content
  53.  $arr_form=array(); 
  54.  $form= regular_form_tags($content); 
  55.  for($i= 0;$i<count($form[0]);$i++) 
  56.  { 
  57.  $arr_form[$i]['action'] = regular_form_action($form[1][$i]); 
  58.  $arr_form[$i]['method'] = regular_form_method($form[1][$i]); 
  59.  $input= regular_input_tags($form[2][$i]); 
  60.  for($j= 0;$j<count($input[0]);$j++) 
  61.  { 
  62.  $arr_form[$i]['inputs'][$j]['name'] = regular_input_name($input[0][$j]); 
  63.  $arr_form[$i]['inputs'][$j]['type'] = regular_input_type($input[0][$j]); 
  64.  $arr_form[$i]['inputs'][$j]['value'] = regular_input_value($input[0][$j]); 
  65.  } 
  66.  $textarea= regular_textarea_tags($form[2][$i]); 
  67.  for($k= 0;$k<count($textarea);$k++) 
  68.  { 
  69.  $arr_form[$i]['textarea'][$k]['name'] = regular_textarea_name($textarea[$k]); 
  70.  $arr_form[$i]['textarea'][$k]['value'] = regular_textarea_value($textarea[$k]); 
  71.  } 
  72.  $select= regular_select_tags($form[2][$i]); 
  73.  for($l= 0;$l<count($select[0]);$l++) 
  74.  { 
  75.  $arr_form[$i]['select'][$l]['name'] = regular_select_name($select[1][$l]); 
  76.  $option= regular_option_tags($select[2][$l]); 
  77.  for($n= 0;$n<count($option[$l]);$n++) 
  78.  { 
  79.  $arr_form[$i]['select'][$l]['option'][$n] = regular_option_value($option[$l][$n]); 
  80.  } 
  81.  } 
  82.  } 
  83.  return$arr_form
  84. // 正则匹配 form 标签 
  85. functionregular_form_tags($string
  86.  $pattern='/<form(.*?)>(.*?)<\/form>/si'
  87.  preg_match_all($pattern,$string,$result); 
  88.  return$result
  89. // 正则匹配 form 标签的 action 属性值 
  90. functionregular_form_action($string
  91.  $pattern='/action[\s]*?=[\s]*?([\'\"])(.*?)\1/'
  92.  if(preg_match($pattern,$string,$result)) 
  93.  { 
  94.  return$result[2]; 
  95.  } 
  96.  returnnull; 
  97. // 正则匹配 form 标签的 method 属性值 
  98. functionregular_form_method($string
  99.  $pattern='/method[\s]*?=[\s]*?([\'\"])(.*?)\1/'
  100.  if(preg_match($pattern,$string,$result)) 
  101.  { 
  102.  return$result[2]; 
  103.  } 
  104.  returnnull; 
  105. // 正则匹配 input 标签 
  106. functionregular_input_tags($string
  107.  $pattern='/<input.*?\/?>/si'
  108.  if(preg_match_all($pattern,$string,$result)) 
  109.  { 
  110.  return$result
  111.  } 
  112.  returnnull; 
  113. // 正则匹配 input 标签的 name 属性值 
  114. functionregular_input_name($string
  115.  $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/'
  116.  if(preg_match($pattern,$string,$result)) 
  117.  { 
  118.  return$result[2]; 
  119.  } 
  120.  returnnull; 
  121.    
  122. // 正则匹配 input 标签的 type 属性值 
  123. functionregular_input_type($string
  124.  $pattern='/type[\s]*?=[\s]*?([\'\"])(.*?)\1/'
  125.  if(preg_match($pattern,$string,$result)) 
  126.  { 
  127.  return$result[2]; 
  128.  } 
  129.  returnnull; 
  130. // 正则匹配 input 标签的 value 属性值 
  131. functionregular_input_value($string
  132.  $pattern='/value[\s]*?=[\s]*?([\'\"])(.*?)\1/'
  133.  if(preg_match($pattern,$string,$result)) 
  134.  { 
  135.  return$result[2]; 
  136.  } 
  137.  returnnull; 
  138. // 正则匹配 textarea 标签 
  139. functionregular_textarea_tags($string
  140.  $pattern='/(<textarea.*?>.*?<\/textarea[\s]*?>)/si'
  141.  if(preg_match_all($pattern,$string,$result)) 
  142.  { 
  143.  return$result[1]; 
  144.  } 
  145.  returnnull; 
  146. // 正则匹配 textarea 标签的 name 属性值 
  147. functionregular_textarea_name($string
  148.  $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/si'
  149.  if(preg_match($pattern,$string,$result)) 
  150.  { 
  151.  return$result[2]; 
  152.  } 
  153.  returnnull; 
  154. // 正则匹配 textarea 标签的 name 属性值 
  155. functionregular_textarea_value($string
  156.  $pattern='/<textarea.*?>(.*?)<\/textarea>/si'
  157.  if(preg_match($pattern,$string,$result)) 
  158.  { 
  159.  return$result[1]; 
  160.  } 
  161.  returnnull; 
  162. // 正则匹配 select 标签 
  163. functionregular_select_tags($string
  164.  $pattern='/<select(.*?)>(.*?)<\/select[\s]*?>/si'
  165.  preg_match_all($pattern,$string,$result); 
  166.  return$result
  167. // 正则匹配 select 标签的 option 子标签 
  168. functionregular_option_tags($string
  169.  $pattern='/<option(.*?)>.*?<\/option[\s]*?>/si'
  170.  preg_match_all($pattern,$string,$result); 
  171.  return$result
  172. // 正则匹配 select 标签的 name 属性值 
  173. functionregular_select_name($string
  174.  $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/si'
  175.  if(preg_match($pattern,$string,$result)) 
  176.  { 
  177.  return$result[2]; 
  178.  } 
  179.  returnnull; 
  180. // 正则匹配 select 的子标签 option 的 value 属性值 
  181. functionregular_option_value($string
  182.  $pattern='/value[\s]*?=[\s]*?([\'\"])(.*?)\1/si'
  183.  if(preg_match($pattern,$string,$result)) 
  184.  { 
  185.  return$result[2]; 
  186.  } 
  187.  returnnull; 

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

Tags: 正则 表单 实例

分享到: