php中正则表达式的匹配和数据验证总结
正则表达式能匹配复杂的字符串形式,比字符串处理函数功能更加多,只不过执行效率有所降低,但是可以实现非常复杂的匹配,下面总结一下
1、简单的字符串匹配,判断指定字符串是不是在另一个字符串中,和字符串查找函数差不多
- $p = '/苹果/';
- $str = "我喜欢吃苹果和香蕉";
- if (preg_match($p, $str)) {
- echo '匹配成功!';
- }else{
- echo "匹配失败!";
- }
可以看出preg_match()函数用来匹配正则表达式,参数依次是表达式(匹配规则),原字符串,这就是最最简单的正则表达式了
2、忽略大小写匹配
- $p = '/bbc/i';
- $str = "BBC是英国的一个电视台";
- if (preg_match($p, $str)) {
- echo '匹配成功!';
- }
可以看到这个也是匹配成功的,表达式后面加i代表忽略大小写进行匹配
3、常用的正则匹配字符串中的数据(电话号码,姓名,邮箱、HTML数据)
- //匹配电话号码
- $p = '/\d+\-\d+/';
- $str = "我的电话是010-12345678";
- preg_match($p, $str, $match);
- echo $match[0];
- echo "<br />";
- //匹配姓名
- $p = '/[\w\s+]:([\w\s]+)/';
- $str = "name:zengzhiying";
- preg_match($p, $str, $match);
- echo $match[1];
- echo "<br />";
- //匹配邮箱地址
- $subject = "my email is yingzhi_zeng@126.com";
- $pattern='/\w+@\w+\.\w+$/';
- preg_match($pattern,$subject,$mathes);
- echo $mathes[0];
- echo "<br />";
- //匹配HTML数据
- $str = "<ul>
- <li>item 1</li>
- <li>item 2</li>
- </ul>";
- $p='/<li>(.*?)<\/li>/i';
- preg_match_all($p,$str,$matches);
- print_r($matches[1]);
这里preg_match()函数的第三个参数是匹配获得的结果,是一个数组,如果不知道$match哪一个元素是要找的,可以先print_r试一下,然后再确定最终结果
4、获取抓取网页中的特定数据
有时候我们需要抓取其他网站的某个具体数据,首先我们抓取到的是整个页面的HTML内容,然后把它们放到字符串中,接下来我们想获取其中某个元素中的值,这个时候就需要正则表达式进行匹配了,下面看一个案例,我们登录网站时一般除了提交用户名、密码、验证码等数据外一般还有隐藏域,value里面有一段很长的字符串,随着不同的客户端会发生变化,这是为了防止一些非法操作的,如果仅仅是这样我们可以抓取到这个数据,从而在服务器端进行模拟登录,一样抓取到用户登录后的内容,php中可以用curl发送请求来实现,现在只是抓取value属性的值,代码如下:
- $data="<input type=\"hidden\" name=\"__VIEWSTATE\" value=\"shssksswHJFJNVjsuehdj28u3uej-9wj\" />";
- $pattern = '/<input type="hidden" name="__VIEWSTATE" value="(.*?)" \/>/is';
- preg_match_all($pattern, $data, $matches);
- echo $matches[1][0];
这样我们就输出了特定数据,就是 shssksswHJFJNVjsuehdj28u3uej-9wj
5、验证数据不能为空
有时候用户输入信息我们通过get或者post方式获取,首先要确定某个变量不能是空值,这个用php内置函数empty就可以了,下面是一个简单的函数
- function nonempty($data){
- if(!empty($data) || $data=='0'){
- $isValue = true;
- }else{
- $isValue = false;
- }
- return $isValue;
- }
返回值我们可以用其他值,总之方便我们使用就可以了,可以作为判断也可以输出信息
6、验证邮箱格式
- function EmailVer($email){
- $pattern='/^[\w\.]+@\w+\.\w+$/i';
- if(!preg_match($pattern, $email)) {
- $ret=0;
- }else {
- $ret=1;
- }
- return $ret;
- }
7、验证手机号码
- function MobileVer($mobile) {
- $pattern='/^1\d{10}$/i';
- if(!preg_match($pattern, $mobile) {
- $ret=0;
- }else {
- $ret=1;
- }
- return $ret;
- }
8、验证url地址(必须包含http等协议头)
- function UrlVer($url){
- if(!filter_var($url,FILTER_VALIDATE_URL)){
- return false;
- }else{
- return true;
- }
- }
这是php提供的内置函数验证
9、验证完整的域名
- function DomainVer($url){
- if(!preg_match('/^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?$/',$url)){
- return false;
- }else{
- return true;
- }
- }
仅仅是域名,比如baidu.com www.baidu.com 其他就返回false,比如www.baidu.com/
10、验证输入是否为整数数字即>=0的整数
- function Number_Ver($num){
- if(preg_match('/^\d{1,}$/', $num)){
- return true;
- }else{
- return false;
- }
- }
我们经常会遇到get或者post获取参数值,这些值无论输入什么默认都是字符串类型的值,所以尽管你输入的是整数,但是php内置方法is_int还是判断不出来的,所以上面方法可以判断出来,并且可以判断整形的,都可以,另外验证负数就很简单了,正则一改就ok了
发现实用的继续补充
php中正则表达式的匹配和数据验证总结的更多相关文章
- JavaScript中正则表达式判断匹配规则以及常用的方法
JavaScript中正则表达式判断匹配规则以及常用的方法: 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想 ...
- js下拉框:从数组中筛选出匹配的数据
handleChange(val) { let obj = {} // 遍历数组 obj = this.options.find(item => { // 筛选出匹配的数据 return ite ...
- 【RegExp】JavaScript中正则表达式判断匹配规则以及常用方法
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符 ...
- 关于flex中正则表达式上下文匹配的问题
按照课本与网上的说法,斜杠'/'表示匹配上下文,例如ab/cd表示当ab后面有cd时匹配ab 然而如果实际这么写,flex在调用该正则表达式时触发'unrecognized rule' flex源代码 ...
- 记录一下SparkStreaming中因为使用redis做数据验证而导致数据结果不对的问题
业务背景: 需要通过redis判断当前用户是否是新用户.当出现新用户后,会将该用户放入到redis中,以标明该用户已不是新用户啦. 出现问题: 发现入库时,并没有新用户入库,但我看了数据了,确实应该是 ...
- 在ASP.NET 中有哪些数据验证控件(请解释ASP.NET中以什么方式进行数据验证)?
(1)RequiredFieldValidator:检查用户是否输入: (2)CompareValidator:检查两个表单输入项的输入信息是否存在某种指定关系,比如大.等于等: (3)RangeVa ...
- Java中的数据验证
原文链接:https://www.cuba-platform.com/blog/2018-10-09/945 翻译:CUBA China CUBA-Platform 官网 : https://www. ...
- MVC 数据验证【转】
[转自]http://www.cnblogs.com/dozer/archive/2010/04/12/MVC-DataAnnotations.html 作者Dozer 今天在这里给大家介绍一下MVC ...
- MVC数据验证
深入浅出 MVC 数据验证 2.0 [附演示源码] 今天在这里给大家介绍一下MVC的数据验证框架. 在1.0版中,很多朋友提出了怎么使用客户端验证,今天找了一些资料,发现了客户端验证的方法. 1.MV ...
随机推荐
- BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...
- [IOS UICollectionView模版]
创建CollectionCell模版: 1.新建类CollectionCell继承自UICollectionViewCell 2.新建Xib,命名为CollectionCell.xib a.选中Col ...
- android选择时间攻略
安卓开发过程中难免会碰到需要选择日期时间的情况,由于大部分android初级教程都没教怎么选择时间,初学者碰到这种难免会有些不知所措,难道要让用户自己输入日期时间?先不说用户体验不好,处理用户输入各式 ...
- Java Web 设置默认首页
一.问题描述 这里所谓的默认首页,是指在访问项目根目录时(如 http://localhost:8080/zhx-web/ )展示的页面,通过在web.xml里配置 <welcome-file- ...
- What to call your Academic Event
- Java设计原则:面向接口的设计
前言:在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的.在这种情况下,各个对象内部是如何实现对系统设计人员来说就不那么重要:而各个对象之间的协作关系则成为系统设计的关键.小到不同 ...
- 对象化的Http和请求对象HttpRequest
在面向对象的语言中,有种“万物皆对象”的说法.在上篇文章中介绍了HttpRuntime类,在该类收到请求之后,立即通过HttpWorkerRequest工作者对象对传递的参数进行分析和分解,创建方便网 ...
- SVM算法入门
转自:http://blog.csdn.net/yangliuy/article/details/7316496SVM入门(一)至(三)Refresh 按:之前的文章重新汇编一下,修改了一些错误和不当 ...
- Flume-NG内置计数器(监控)源码级分析
Flume的内置监控怎么整?这个问题有很多人问.目前了解到的信息是可以使用Cloudera Manager.Ganglia有图形的监控工具,以及从浏览器获取json串,或者自定义向其他监控系统汇报信息 ...
- JVM是如何分配和回收内存?有实例!
上一篇博客我简单介绍了下如何手动计算一个Java对象到底占用多少内存?今天就想聊下这个内存JVM到底是是如何分配和回收的. Java整体来说还是一个GC比较友好的语言,无论是分代的垃圾收集,还是基于G ...