马富天PHP博客

PHP 正则匹配页面中 form 表单所有元素的类型及属性值

学习笔记 马富天 2016-12-13 22:40:30 61 0

【摘要】需要在正则匹配页面中,所有可能存在的 form 表单的元素,可能有 input,action,select,textarea等等所有可能的元素,本文给出一个代码示例。

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

  1. <!DOCTYPE html>
  2. <html>
  3. 	<head>
  4. 		<meta charset="utf-8" />
  5. 		<title>一个含有 form 表单的登录注册页面</title>
  6. 		<style type="text/css">
  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. 		<form action="register.php" method="post">
  15. 			<input type="hidden" name="cookie" value="SJKjki80KJ8jkl2" />
  16. 			<table cellpadding="0" cellspacing="0" class="tbl">			
  17. 				<tr>
  18. 					<th colspan="2">注册</th>
  19. 				</tr>
  20. 				<tr>
  21. 					<td>昵称:</td>
  22. 					<td><input type="text" name = 'name' required="" /></td>
  23. 				</tr>
  24. 				<tr>
  25. 					<td>密码:</td>
  26. 					<td><input name="password" type="password" required="required" /></td>
  27. 				</tr>
  28. 				<tr>
  29. 					<td>年龄:</td>
  30. 					<td><input  name="age" value="22" required="required" ></td>
  31. 				</tr>
  32. 				<tr>
  33. 					<td>性别:</td>
  34. 					<td>
  35. 						<input type="radio" name="sex" value="1" /> 男
  36. 						<input type="radio" name="sex" value="0" /> 女
  37. 					</td>
  38. 				</tr>
  39. 				<tr>
  40. 					<td>地区:</td>
  41. 					<td>
  42. 						<select name="area">
  43. 							<option value="jiangsu">江苏</option>
  44. 							<option value="shandong">山东</option>
  45. 							<option value="fujian">福建</option>
  46. 							<option value="beijing">北京</option>
  47. 						</select>
  48. 					</td>
  49. 				</tr>
  50. 				<tr>
  51. 					<td>城市:</td>
  52. 					<td>
  53. 						<select name="city">
  54. 							<option value="qingdao">青岛</option>
  55. 							<option value="longyan">龙岩</option>
  56. 							<option value="beijing">北京</option>
  57. 							<option value="wuxi">无锡</option>
  58. 						</select>
  59. 					</td>
  60. 				</tr>
  61. 				<tr>
  62. 					<td>兴趣:</td>
  63. 					<td>
  64. 						<input type="checkbox" name="xingqu[]" value="1" > 篮球
  65. 						<input type="checkbox" name="xingqu[]" value="2"> 足球
  66. 						<input type="checkbox" name="xingqu[]" value="3" > 跳高
  67. 					</td>
  68. 				</tr>
  69. 				<tr>
  70. 					<td>照片:</td>
  71. 					<td><input type="file" name="photo" /></td>
  72. 				</tr>
  73. 				<tr>
  74. 					<td>简介:</td>
  75. 					<td><textarea name="summary" required="">这里填入个人简介</textarea></td>
  76. 				</tr>
  77. 				<tr>
  78. 					<td>备注:</td>
  79. 					<td><textarea name="remark" required="">1</textarea ></td>
  80. 				</tr>
  81. 				<tr>
  82. 					<td colspan="2"><input type="submit" name="register" value="注册"></td>
  83. 				</tr>
  84. 			</table>	
  85. 		</form>
  86. 		<form action="login.php" method="post">
  87. 			<table cellpadding="0" cellspacing="0" class="tbl">
  88. 				<tr>
  89. 					<th colspan="2">登录</th>
  90. 				</tr>
  91. 				<tr>
  92. 					<td>昵称:</td>
  93. 					<td><input type="text" name = 'name' required="required" /></td>
  94. 				</tr>
  95. 				<tr>
  96. 					<td>密码:</td>
  97. 					<td><input name="password" type="password" required="required" /></td>
  98. 				</tr>
  99. 				<tr>
  100. 					<td>备注:</td>
  101. 					<td><textarea name="remark" required="">2</textarea></td>
  102. 				</tr>				
  103. 				<tr>
  104. 					<td colspan="2"><input type="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(empty($arr_form))
  4. {
  5. 	echo '抱歉!未匹配到 form 表单元素';
  6. }else
  7. {
  8. 	foreach($arr_form as $k => $v)
  9. 	{
  10. 		echo 'form'.($k+1).':<br />';
  11. 		if(!empty($v['action']))
  12. 		{
  13. 			echo '----action:<br />';
  14. 			echo '--------'.$v['action'].'<br />';
  15. 		}
  16. 		if(!empty($v['method']))
  17. 		{
  18. 			echo '----method:<br />';
  19. 			echo '--------'.$v['method'].'<br />';
  20. 		}		
  21. 		if(!empty($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(!empty($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(!empty($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(!empty($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. function get_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. function regular_form_tags($string)
  91. {	
  92. 	$pattern = '/<form(.*?)>(.*?)<\/form>/si';	
  93. 	preg_match_all($pattern,$string,$result);
  94. 	return $result;
  95. }
  96. //	正则匹配 form 标签的 action 属性值
  97. function regular_form_action($string)
  98. {
  99. 	$pattern = '/action[\s]*?=[\s]*?([\'\"])(.*?)\1/';
  100. 	if(preg_match($pattern,$string,$result))
  101. 	{
  102. 		return $result[2];
  103. 	}
  104. 	return null;
  105. }
  106. //	正则匹配 form 标签的 method 属性值
  107. function regular_form_method($string)
  108. {
  109. 	$pattern = '/method[\s]*?=[\s]*?([\'\"])(.*?)\1/';
  110. 	if(preg_match($pattern,$string,$result))
  111. 	{
  112. 		return $result[2];
  113. 	}
  114. 	return null;
  115. }
  116. //	正则匹配 input 标签
  117. function regular_input_tags($string)
  118. {
  119. 	$pattern = '/<input.*?\/?>/si';	
  120. 	if(preg_match_all($pattern,$string,$result))
  121. 	{
  122. 		return $result;		
  123. 	}
  124. 	return null;
  125. }
  126. //	正则匹配 input 标签的 name 属性值
  127. function regular_input_name($string)
  128. {
  129. 	$pattern = '/name[\s]*?=[\s]*?([\'\"])(.*?)\1/';
  130. 	if(preg_match($pattern,$string,$result))
  131. 	{
  132. 		return $result[2];
  133. 	}
  134. 	return null;
  135. 	
  136. }
  137. //	正则匹配 input 标签的 type 属性值
  138. function regular_input_type($string)
  139. {
  140. 	$pattern = '/type[\s]*?=[\s]*?([\'\"])(.*?)\1/';
  141. 	if(preg_match($pattern,$string,$result))
  142. 	{
  143. 		return $result[2];
  144. 	}
  145. 	return null;
  146. }
  147. //	正则匹配 input 标签的 value 属性值
  148. function regular_input_value($string)
  149. {
  150. 	$pattern = '/value[\s]*?=[\s]*?([\'\"])(.*?)\1/';
  151. 	if(preg_match($pattern,$string,$result))
  152. 	{
  153. 		return $result[2];
  154. 	}
  155. 	return null;	
  156. }
  157. //	正则匹配 textarea 标签
  158. function regular_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. 	return null;
  166. }
  167. //	正则匹配 textarea 标签的 name 属性值
  168. function regular_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. 	return null;
  176. }
  177. //	正则匹配 textarea 标签的 name 属性值
  178. function regular_textarea_value($string)
  179. {
  180. 	$pattern = '/<textarea.*?>(.*?)<\/textarea>/si';	
  181. 	if(preg_match($pattern,$string,$result))
  182. 	{
  183. 		return $result[1];
  184. 	}
  185. 	return null;
  186. }
  187. //	正则匹配 select 标签
  188. function regular_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. function regular_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. function regular_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. 	return null;
  210. }
  211. //	正则匹配 select 的子标签 option 的 value 属性值
  212. function regular_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. 	return null;
  220. }

运行效果如下图所示:

请输入图片名称请输入图片名称

这样我们就可以实现获取任意一个页面中的 form 表单所有存在的元素啦!(给站长点个赞吧,本文花费了一天的时间才写好的~~~)

版权归 马富天PHP博客 所有

本文标题:《PHP 正则匹配页面中 form 表单所有元素的类型及属性值》

本文链接地址:http://www.mafutian.net/237.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 PHP 使用 array_multisort 对二维数组按某一指定字段进行排序 》 下一篇《 在 ubuntu 中实现允许 root 远程登录 》
分享到:

暂无评论

评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码