php中正则表达式的匹配和数据验证总结

  正则表达式能匹配复杂的字符串形式,比字符串处理函数功能更加多,只不过执行效率有所降低,但是可以实现非常复杂的匹配,下面总结一下

1、简单的字符串匹配,判断指定字符串是不是在另一个字符串中,和字符串查找函数差不多

1 $p = ‘/苹果/‘;
2 $str = "我喜欢吃苹果和香蕉";
3 if (preg_match($p, $str)) {
4     echo ‘匹配成功!‘;
5 }else{
6     echo "匹配失败!";
7 }

可以看出preg_match()函数用来匹配正则表达式,参数依次是表达式(匹配规则),原字符串,这就是最最简单的正则表达式了

2、忽略大小写匹配

1 $p = ‘/bbc/i‘;
2 $str = "BBC是英国的一个电视台";
3 if (preg_match($p, $str)) {
4     echo ‘匹配成功!‘;
5 }

可以看到这个也是匹配成功的,表达式后面加i代表忽略大小写进行匹配

3、常用的正则匹配字符串中的数据(电话号码,姓名,邮箱、HTML数据)

 1 //匹配电话号码
 2 $p = ‘/\d+\-\d+/‘;
 3 $str = "我的电话是010-12345678";
 4 preg_match($p, $str, $match);
 5 echo $match[0];
 6 echo "<br />";
 7 //匹配姓名
 8 $p = ‘/[\w\s+]:([\w\s]+)/‘;
 9 $str = "name:zengzhiying";
10 preg_match($p, $str, $match);
11 echo $match[1];
12 echo "<br />";
13 //匹配邮箱地址
14 $subject = "my email is [email protected]";
15 $pattern=‘/\[email protected]\w+\.\w+$/‘;
16 preg_match($pattern,$subject,$mathes);
17 echo $mathes[0];
18 echo "<br />";
19 //匹配HTML数据
20 $str = "<ul>
21             <li>item 1</li>
22             <li>item 2</li>
23         </ul>";
24 $p=‘/<li>(.*?)<\/li>/i‘;
25 preg_match_all($p,$str,$matches);
26 print_r($matches[1]);

这里preg_match()函数的第三个参数是匹配获得的结果,是一个数组,如果不知道$match哪一个元素是要找的,可以先print_r试一下,然后再确定最终结果

4、获取抓取网页中的特定数据

  有时候我们需要抓取其他网站的某个具体数据,首先我们抓取到的是整个页面的HTML内容,然后把它们放到字符串中,接下来我们想获取其中某个元素中的值,这个时候就需要正则表达式进行匹配了,下面看一个案例,我们登录网站时一般除了提交用户名、密码、验证码等数据外一般还有隐藏域,value里面有一段很长的字符串,随着不同的客户端会发生变化,这是为了防止一些非法操作的,如果仅仅是这样我们可以抓取到这个数据,从而在服务器端进行模拟登录,一样抓取到用户登录后的内容,php中可以用curl发送请求来实现,现在只是抓取value属性的值,代码如下:

1 $data="<input type=\"hidden\" name=\"__VIEWSTATE\" value=\"shssksswHJFJNVjsuehdj28u3uej-9wj\" />";
2 $pattern = ‘/<input type="hidden" name="__VIEWSTATE" value="(.*?)" \/>/is‘;
3 preg_match_all($pattern, $data, $matches);
4 echo $matches[1][0];

这样我们就输出了特定数据,就是 shssksswHJFJNVjsuehdj28u3uej-9wj

5、验证数据不能为空

有时候用户输入信息我们通过get或者post方式获取,首先要确定某个变量不能是空值,这个用php内置函数empty就可以了,下面是一个简单的函数

1 function Noempty($user){
2     if(empty($user)){
3         $ret=0;
4     }else{
5         $ret=1;
6     }
7     return $ret;
8 }

返回值我们可以用其他值,总之方便我们使用就可以了,可以作为判断也可以输出信息

6、验证邮箱格式

1 function EmailVer($email){
2      $pattern=‘/^[\w\.][email protected]\w+\.\w+$/i‘;
3      if(!preg_match($pattern, $email)) {
4          $ret=0;
5      }else {
6          $ret=1;
7      }
8      return $ret;
9 }

7、验证手机号码

1 function MobileVer($mobile) {
2     $pattern=‘/^1\d{10}$/i‘;
3     if(!preg_match($pattern, $mobile) {
4         $ret=0;
5     }else {
6         $ret=1;
7     }
8     return $ret;
9 }

后续再继续补充

时间: 2024-09-29 01:46:21

php中正则表达式的匹配和数据验证总结的相关文章

17._4Csharp中正则表达式的匹配

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Text.RegularExpressions; namespace _17._4Csharp中正则表达式的匹配 { class Program { static void Main(string[] args) { string patte

JavaScript中正则表达式判断匹配规则以及常用的方法

JavaScript中正则表达式判断匹配规则以及常用的方法: 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它"匹配"了. \d可以匹配一个数字                 '00\d'可以匹配'007' ,'\d\d\d'可以匹配'010' \w可以匹配一个字母或数字      '\w\w'可以匹配'js' \s可

记录一下SparkStreaming中因为使用redis做数据验证而导致数据结果不对的问题

先说业务, 在flatMap阶段,当前指标会在redis去验证数据是否是新用户,如果是新用户,那么进行统计,统计会将该新用户add至我们的redis容器中... 这个业务其实很简单...但坑自己的是,flatMap后的RDD,会被两个不同的action使用... 然后...我发现第二个action中永远是统计不到新用户了..... 不知道大家看出来问题的原因了吗?  我TMD排查一天才找到原因. 因为flatMap是个transform,每次action才会执行. 而我执行两次action那么f

【RegExp】JavaScript中正则表达式判断匹配规则以及常用方法

字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它"匹配"了. \d可以匹配一个数字                 '00\d'可以匹配'007' ,'\d\d\d'可以匹配'010' \w可以匹配一个字母或数字      '\w\w'可以匹配'js' \s可以匹配一个空格(也包括Tab等空白符) \DWS都是表示匹配与

MVC 数据验证【转】

[转自]http://www.cnblogs.com/dozer/archive/2010/04/12/MVC-DataAnnotations.html 作者Dozer 今天在这里给大家介绍一下MVC的数据验证框架. 在1.0版中,很多朋友提出了怎么使用客户端验证,今天找了一些资料,发现了客户端验证的方法. 1.MVC中的数据验证框架有何优点? 在Asp.net时代,或者没有使用MVC的验证框架,一般是在BLL层中进行数据验证,但是BLL层的返回值又只能返回一个东西,比如一个字符串,而实际情况中

&lt;转&gt;PHP中正则表达式函数

PHP中的正则表达式函数 在PHP中有两套正则表达式函数库.一套是由PCRE(Perl Compatible Regular Expression)库提供的,基于传统型NFA.PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其使用以"preg_"为前缀命名的函数.另一套是由POSIX(Portable Operation System interface)扩展库提供的,基于POSIX NFA.POSIX扩展的正则表达式由POSIX 1003.2定义,一般使用以&quo

asp.net mvc3 数据验证(四)—Remote验证的一个注意事项

原文:asp.net mvc3 数据验证(四)-Remote验证的一个注意事项         前几篇把asp.net mvc3 中基于Model的主要数据验证的方法都已经讲完了,本节纯粹只是讲一个我曾经遇到的问题,因为和数据验证相关,所以就放在了这系列的文章中. 经过前几篇文章的分享,大家应该觉得asp.net 自带的Remote远程数据注解比较好用,但是我在实际使用中却遇到了问题. 首先,一般来说对于一个属性的验证可能需要不止一个的远程验证,比如对于用户名来说,我们需要对于它的长度做一些限制

Nginx正则表达式之匹配操作符详解

nginx可以在配置文件中对某些内置变量进行判断,从而实现某些功能.例如:防止rewrite.盗链.对静态资源设置缓存以及浏览器限制等等.由于nginx配置中有if指令,但是没有对应else指令,所以判断要分为匹配和不匹配. 字符串表达式支持正则表达式,能设定大小写是否敏感.因此共有四个操作符, 如下: ~     区分大小写(大小写敏感)匹配成功 ~*   不区分大小写匹配成功 !~    区分大小写匹配失败 !~*  不区分大小写匹配失败 1: 限制某些类型的客户端的访问if指令所有的Ngi

在C#中使用正则表达式自动匹配并获取所需要的数据

转自:http://my.oschina.net/bv10000/blog/111736 正则表达式能根据设置匹配各种数据(比如:e-mail地址,电话号码,身份中号码等等).正则表达式功能强大,使用灵活,C#,Java,JavaScript等多种语言都支持正则表达式.在互联网上“抓取数据”更是少不了使用正则表达式.今天我要说的是在C#中使用正则表达式自动匹配并获取所需要的数据. 从下面是某个IP查询网站返回查询结果的一个部分(字符串),现在就是要从这个字符串中获取“查询结果1:”后面的“北京市