首页 > 开发 > PHP > 正文

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

2024-05-04 22:01:11
字体:大 中 小
来源:转载
供稿:网友

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表