0

0

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

高洛峰

高洛峰

发布时间:2017-03-01 16:27:34

|

1466人浏览过

|

来源于php中文网

原创

前言

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

实例代码如下

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



 
 
 一个含有 form 表单的登录注册页面
 
 
 
 
注册
昵称:
密码:
年龄:
性别:
地区:
城市:
兴趣: 篮球 足球 跳高
照片:
简介:
备注:
登录
昵称:
密码:
备注:

立即学习PHP免费学习笔记(深入)”;

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

匹配的源代码是:

速创猫AI简历
速创猫AI简历

一键生成高质量简历

下载

$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).':
'; if(!empty($v['action'])) { echo '----action:
'; echo '--------'.$v['action'].'
'; } if(!empty($v['method'])) { echo '----method:
'; echo '--------'.$v['method'].'
'; } if(!empty($v['inputs'])) { echo '----inputs:
'; foreach($v['inputs'] as $key => $value) { echo '--------name:'.$value['name'].' type:'.$value['type'].' value:'.$value['value'].'
'; } } if(!empty($v['textarea'])) { echo '----textarea:
'; foreach($v['textarea'] as $key => $value) { echo '--------name:'.$value['name'].' value:'.$value['value'].'
'; } } if(!empty($v['select'])) { echo '----select:
'; for($m = 0;$m < count($v['select']);$m ++) { echo '--------name:'.$v['select'][$m]['name'].'
'; if(!empty($v['select'][$m]['option'])) { foreach ($v['select'][$m]['option'] as $key => $value) { echo '------------value:'.$value.'
'; } } } } } } // 获取页面中的 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>/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 = '//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[\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>/si'; if(preg_match($pattern,$string,$result)) { return $result[1]; } return null; } // 正则匹配 select 标签 function regular_select_tags($string) { $pattern = '/(.*?)<\/select[\s]*?>/si'; preg_match_all($pattern,$string,$result); return $result; } // 正则匹配 select 标签的 option 子标签 function regular_option_tags($string) { $pattern = '/.*?<\/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免费学习笔记(深入)”;

运行效果如下图所示:

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

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

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

更多PHP用正则匹配form表单中所有元素的类型和属性值相关文章请关注PHP中文网!

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

42

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

4

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 0.9万人学习

JavaScript正则表达式基础与实战
JavaScript正则表达式基础与实战

共11课时 | 1.4万人学习

布尔教育正则表达式视频教程
布尔教育正则表达式视频教程

共14课时 | 4.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号