最近工作中遇到一个需求,需要在正则匹配页面中,所有可能存在的 form 表单的元素,可能有 input,action,select,textarea等等所有可能的元素,本文给出一个代码示例。感兴趣的朋友们可以参考学习。
实例代码如下
假设页面 1.html 的网页源代码是:
代码如下 | 复制代码 |
<!DOCTYPE html> <html> <head> <metacharset="utf-8"/> <title>一个含有 form 表单的登录注册页面</title> <styletype="text/css"> *{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> <formaction="register.php"method="post"> <inputtype="hidden"name="cookie"value="SJKjki80KJ8jkl2"/> <tablecellpadding="0"cellspacing="0"class="tbl"> <tr> <thcolspan="2">注册</th> </tr> <tr> <td>昵称:</td> <td><inputtype="text"name='name'required=""/></td> </tr> <tr> <td>密码:</td> <td><inputname="password"type="password"required="required"/></td> </tr> <tr> <td>年龄:</td> <td><inputname="age"value="22"required="required"></td> </tr> <tr> <td>性别:</td> <td> <inputtype="radio"name="sex"value="1"/> 男 <inputtype="radio"name="sex"value="0"/> 女 </td> </tr> <tr> <td>地区:</td> <td> <selectname="area"> <optionvalue="jiangsu">江苏</option> <optionvalue="shandong">山东</option> <optionvalue="fujian">福建</option> <optionvalue="beijing">北京</option> </select> </td> </tr> <tr> <td>城市:</td> <td> <selectname="city"> <optionvalue="qingdao">青岛</option> <optionvalue="longyan">龙岩</option> <optionvalue="beijing">北京</option> <optionvalue="wuxi">无锡</option> </select> </td> </tr> <tr> <td>兴趣:</td> <td> <inputtype="checkbox"name="xingqu[]"value="1"> 篮球 <inputtype="checkbox"name="xingqu[]"value="2"> 足球 <inputtype="checkbox"name="xingqu[]"value="3"> 跳高 </td> </tr> <tr> <td>照片:</td> <td><inputtype="file"name="photo"/></td> </tr> <tr> <td>简介:</td> <td><textareaname="summary"required="">这里填入个人简介</textarea></td> </tr> <tr> <td>备注:</td> <td><textareaname="remark"required="">1</textarea></td> </tr> <tr> <tdcolspan="2"><inputtype="submit"name="register"value="注册"></td> </tr> </table> </form> <formaction="login.php"method="post"> <tablecellpadding="0"cellspacing="0"class="tbl"> <tr> <thcolspan="2">登录</th> </tr> <tr> <td>昵称:</td> <td><inputtype="text"name='name'required="required"/></td> </tr> <tr> <td>密码:</td> <td><inputname="password"type="password"required="required"/></td> </tr> <tr> <td>备注:</td> <td><textareaname="remark"required="">2</textarea></td> </tr> <tr> <tdcolspan="2"><inputtype="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(empty($arr_form)) { echo'抱歉!未匹配到 form 表单元素'; }else { foreach($arr_formas$k=>$v) { echo'form'.($k+1).':<br />'; if(!empty($v['action'])) { echo'----action:<br />'; echo'--------'.$v['action'].'<br />'; } if(!empty($v['method'])) { echo'----method:<br />'; echo'--------'.$v['method'].'<br />'; } if(!empty($v['inputs'])) { echo'----inputs:<br />'; foreach($v['inputs']as$key=>$value) { echo'--------name:'.$value['name'].' type:'.$value['type'].' value:'.$value['value'].'<br />'; } } if(!empty($v['textarea'])) { echo'----textarea:<br />'; foreach($v['textarea']as$key=>$value) { echo'--------name:'.$value['name'].' value:'.$value['value'].'<br />'; } } if(!empty($v['select'])) { echo'----select:<br />'; for($m= 0;$m<count($v['select']);$m++) { echo'--------name:'.$v['select'][$m]['name'].'<br />'; if(!empty($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 表单所有存在的元素啦!
Laravel相信很多人都知道,它在大家的生活中还是很常见得到。一些用户可能不知道Laravel提交表单怎么实现,下面文章就给大家带来Laravel实现表单提交教程,感兴趣的下面一起来看看。首先,先做一个简单的表单页面
代码如下 | 复制代码 |
<html> <head> </head> <body> <formaction="/submit"method="post"> <inputtype="text"name="a"></input> <inputtype="text"name="b"></input> <inputtype="text"name="c"></input> <inputtype="submit"></input> </form> </body> <html> |
编辑一条路由
代码如下 | 复制代码 |
Route::post('/submit','FormController@store'); |
创建一个控制器
代码如下 | 复制代码 |
<?php
namespaceApp\Http\Controllers;
//use Illuminate\Http\Request;
useApp\Http\Requests; useRequest;
classFormControllerextendsController { publicfunctionstore(){ //var_dump(Request::all()); $input=Request::all(); echo$input['a'].PHP_EOL; echo$input['b'].PHP_EOL; echo$input['c'].PHP_EOL; } } |
小编推荐的这篇文章介绍了php获取今日开始时间和结束时间的方法,非常实用,有兴趣的同学快来看看吧
代码如下 | 复制代码 |
$begintime=date("Y-m-d H:i:s",mktime(0,0,0,date('m'),date('d'),date('Y'))); $endtime=date("Y-m-d H:i:s",mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1); |
这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。
因项目需要,需要Node.js与PHP做接口调用,发现node.js对中文使用md5加密与php对中文md5加密的结果不同。
代码如下 | 复制代码 |
PHP <?php $str='程序员' echo$str.' md5:'.md5($str); ?> |
输出:
程序员 md5:72d9adf4944f23e5efde37f6364c126f
node.JS
代码如下 | 复制代码 |
varcrypto = require('crypto');
varmd5 =function(str){ varcrypto_md5 = crypto.createHash('md5'); crypto_md5.update(str); returncrypto_md5.digest('hex'); }
varstr ='程序员' varresult = str +' md5:'+ md5(str); console.log(result); |
输出:
程序员 md5:1b6ad7846ec870e78363d1db4fb2a0ff
经查阅资料发现是编码问题,只要在node.JS中加入编码即可解决问题。
解决方法如下:
代码如下 | 复制代码 |
varcrypto = require('crypto'); varmd5 =function(str){ varcrypto_md5 = crypto.createHash('md5'); crypto_md5.update(str,'utf8');// 加入编码 returncrypto_md5.digest('hex'); } varstr ='程序员' varresult = str +' md5:'+ md5(str); console.log(result); |
输出:
程序员 md5:72d9adf4944f23e5efde37f6364c126f
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助。