专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

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

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

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

 $p = '/苹果/';
 $str = "我喜欢吃苹果和香蕉";
 if (($p, $str)) {
     echo '匹配成功!';
 }else{
     echo "匹配失败!";
 }

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

2、忽略大小写匹配

 $p = '/bbc/i';
 $str = "BBC是英国的一个电视台";
 if (($p, $str)) {
     echo '匹配成功!';
 }

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

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

 //匹配电话号码
 $p = '/\d+\-\d+/';
 $str = "我的电话是010-12345678";
 ($p, $str, $match);
 echo $match[0];
 echo "<br />";
 //匹配姓名
 $p = '/[\w\s+]:([\w\s]+)/';
 $str = "name:zengzhiying";
 ($p, $str, $match);
 echo $match[1];
 echo "<br />";
 //匹配邮箱地址
 $subject = "my email is yingzhi_zeng@126.com";
 $pattern='/\w+@\w+\.\w+$/';
 ($pattern,$subject,$mathes);
 echo $mathes[0];
 echo "<br />";
 //匹配HTML数据
 $str = "<ul>
             <li>item 1</li>
             <li>item 2</li>
         </ul>";
 $p='/<li>(.*?)<\/li>/i';
 ($p,$str,$matches);
 ($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';
 ($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(!($pattern, $email)) {
          $ret=0;
      }else {
          $ret=1;
      }
      return $ret;
 }

7、验证手机号码

 function MobileVer($mobile) {
     $pattern='/^1\d{10}$/i';
     if(!($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(!('/^[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(('/^\d{1,}$/', $num)){
         return true;
     }else{
         return false;
     }
 }

我们经常会遇到get或者post获取参数值,这些值无论输入什么默认都是字符串类型的值,所以尽管你输入的是整数,但是php内置方法is_int还是判断不出来的,所以上面方法可以判断出来,并且可以判断整形的,都可以,另外验证负数就很简单了,正则一改就ok了

发现实用的继续补充

文章永久链接:https://tech.souyunku.com/47760

未经允许不得转载:搜云库技术团队 » php中正则表达式的匹配和数据验证总结

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们