文档章节

编写PHP正则表达式常用工具类

o
 osc_mervd488
发布于 2018/04/23 18:19
字数 892
阅读 13
收藏 0

精选30+云产品,助力企业轻松上云!>>>

本案例共有上述三个文件

首先展示核心文件regexTool.class.php ,该文件即为此次编写的正则表达式工具类

代码如下:

 

  

<?php
//php常用正则表达式工具类
class regexTool {
    
    private $validate = array(//常用的匹配规则
                'require'   =>  '/.+/',
                'email'     =>  '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/',
                'url'       =>  '/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/',
                'currency'  =>  '/^\d+(\.\d+)?$/',
                'number'    =>  '/^\d+$/',
                'zip'       =>  '/^\d{6}$/',
                'integer'   =>  '/^[-\+]?\d+$/',
                'double'    =>  '/^[-\+]?\d+(\.\d+)?$/',
                'english'   =>  '/^[A-Za-z]+$/',
                'qq'        =>    '/^\d{5,11}$/',
                'mobile'    =>    '/^1(3|4|5|7|8)\d{9}$/',
            );
    private $returnMatchResult = false;//用于切换匹配的结果用,有2中结果可供选择,bool值或匹配到的目标字符串
    private $fixMode = null;//修正模式
    private $matches = array();//匹配的结果数组
    private $isMatch = false;//验证的结果
    
    public function __construct($returnMatchResult = false, $fixMode = null) {//构造方法
        $this->returnMatchResult = $returnMatchResult;
        $this->fixMode = $fixMode;
    }
    //$pattern为验证规则,$subject为输入字符串。 
    private function regex($pattern, $subject) {
        if(array_key_exists(strtolower($pattern), $this->validate))
            $pattern = $this->validate[$pattern].$this->fixMode;
        $this->returnMatchResult ?
            preg_match_all($pattern, $subject, $this->matches) :
            $this->isMatch = preg_match($pattern, $subject) === 1;
        return $this->getRegexResult();
    }
    
    private function getRegexResult() {//用于返回匹配的结果有2种情况
        if($this->returnMatchResult) {
            return $this->matches;
        } else {
            return $this->isMatch;
        }
    }
    
    public function toggleReturnType($bool = null) {//切换返回的类型
        if(empty($bool)) {
            $this->returnMatchResult = !$this->returnMatchResult;
        } else {
            $this->returnMatchResult = is_bool($bool) ? $bool : (bool)$bool;
        }
    }
    
    public function setFixMode($fixMode) {
        $this->fixMode = $fixMode;
    }
    
    public function noEmpty($str) {
        return $this->regex('require', $str);
    }
    
    public function isEmail($email) {
        return $this->regex('email', $email);
    }
    
    public function isMobile($mobile) {
        return $this->regex('mobile', $mobile);
    }
    
    public function check($pattern, $subject) {
        return $this->regex($pattern, $subject);
    }
    
    //......
    
}

 

接着展示reg.html文件的代码如下:

<html>
    <head>
        <title>用户注册</title>
        <meta charset="utf-8">
    </head>
    <body>
        <form action="regCheck.php" method="post">
            用户名 <input type="text" name="username" id="username" value="" /><br /><br />
            email <input type="text" name="email" id="email" value="" /><br /><br />
            手机号 <input type="text" name="mobile" id="mobile" value="" /><br /><br />
            自定义<input type="text" name="check" id="check" value="" /><br/><br/>
            <input type="submit" value="注册"/>
        </form>
    </body>
</html>

接着展示regCheck.php的代码,如下:

<?php
header("Content-Type:text/html;charset=utf-8;");//header头声明编码方式为utf-8
require_once 'regexTool.class.php';

$regex = new regexTool();
if(!$regex->noEmpty($_POST['username'])) exit('用户名是必须填写的!');
if(!$regex->isEmail($_POST['email'])) exit('email格式错误!');
if(!$regex->isMobile($_POST['mobile'])) exit('手机号格式错误!');
if(!$regex->check("/[abcd]123/",$_POST['check'])) exit('特殊验证格式不符合');

//数据库写入

/*
 * @name : show
 * @description : output debug
 * @param $var : input data
 * @return void
 */
function show($var = null, $isdump = false) {
    $func = $isdump ? 'var_dump' : 'print_r';
    if(empty($var)) {
        echo 'null';
    } elseif(is_array($var) || is_object($var)) {
        //array,object
        echo '<pre>';
        $func($var);
        echo '</pre>';
    } else {
        //string,int,float...
        $func($var);
    }
}

运行reg.html文件,程序运行界面如下;

如果什么都不填写就点击注册会收到如下提示:

 

<?php//php常用正则表达式工具类class regexTool {private $validate = array(//常用的匹配规则'require'   =>  '/.+/','email'     =>  '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/','url'       =>  '/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/','currency'  =>  '/^\d+(\.\d+)?$/','number'    =>  '/^\d+$/','zip'       =>  '/^\d{6}$/','integer'   =>  '/^[-\+]?\d+$/','double'    =>  '/^[-\+]?\d+(\.\d+)?$/','english'   =>  '/^[A-Za-z]+$/','qq'=>'/^\d{5,11}$/','mobile'=>'/^1(3|4|5|7|8)\d{9}$/',);private $returnMatchResult = false;//用于切换匹配的结果用,有2中结果可供选择,bool值或匹配到的目标字符串private $fixMode = null;//修正模式private $matches = array();//匹配的结果数组private $isMatch = false;//验证的结果public function __construct($returnMatchResult = false, $fixMode = null) {//构造方法$this->returnMatchResult = $returnMatchResult;$this->fixMode = $fixMode;}//$pattern为验证规则,$subject为输入字符串。 private function regex($pattern, $subject) {if(array_key_exists(strtolower($pattern), $this->validate))$pattern = $this->validate[$pattern].$this->fixMode;$this->returnMatchResult ?preg_match_all($pattern, $subject, $this->matches) :$this->isMatch = preg_match($pattern, $subject) === 1;return $this->getRegexResult();}private function getRegexResult() {//用于返回匹配的结果有2种情况if($this->returnMatchResult) {return $this->matches;} else {return $this->isMatch;}}public function toggleReturnType($bool = null) {//切换返回的类型if(empty($bool)) {$this->returnMatchResult = !$this->returnMatchResult;} else {$this->returnMatchResult = is_bool($bool) ? $bool : (bool)$bool;}}public function setFixMode($fixMode) {$this->fixMode = $fixMode;}public function noEmpty($str) {return $this->regex('require', $str);}public function isEmail($email) {return $this->regex('email', $email);}public function isMobile($mobile) {return $this->regex('mobile', $mobile);}public function check($pattern, $subject) {return $this->regex($pattern, $subject);}//......}

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
php程序员应该掌握的10个技能

1、语法:必须熟练掌握 ,写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正。 2、命令:必须熟悉PHP带的一些常用命令及其常用选项,熟悉那些...

忆童
2012/02/14
153
0
Seay

Seay 是一个 PHP 代码审计工具。 软件界面: 本人目前就读重庆某软件学院软件测试专业,将于2013年1月底毕业,为了扎实基础,于是有时间就会找一些源码研究,有时候想走走捷径,提高下效率,...

Seay_
2012/10/14
3.8K
0
PHP爱好者请坚定你们的信念!

很多学PHP的人一直也搞不清楚,一个PHP程序员和Java程序员或者是.net程序员有什么不同。本文将为你介绍,作为PHP程序员应该知道的,和其他程序员没什么不同。 很多学PHP的人一直也搞不清楚,...

Adam-Lee
2011/09/01
438
8
一个PHP程序员应该掌握的10项技能!【更新】

很多学PHP的人一直也搞不清楚,一个PHP程序员和Java程序员或者是.net程序员有什么不 同,告诉你,其实都一样!没有什么不同,下面的内容,就是针对一个Java程序员掌握的 技能对比PHP来说的!...

朱志兵
2010/12/17
0
0
一个PHP程序员应该掌握的10项技能!【更新】

综合上述,没发现PHP和java有什么不同!PHP和Java,还是.net一样要学的东西有很多! 浮躁的人容易说:PHP语言不行,应该学Java,C#,VB.NET:--是你自己不行了吧!? 浮躁的人容易问:PHP...

朱志兵
2009/08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

dict.items()和dict.iteritems()有什么区别?

问题: Are there any applicable differences between dict.items() and dict.iteritems() ? dict.items()和dict.iteritems()之间是否有适用的区别? From the Python docs: 从Python文档中......

法国红酒甜
59分钟前
20
0
R中“ =”和“ <-”赋值运算符有什么区别?

问题: What are the differences between the assignment operators = and <- in R? R中赋值运算符=和<-之间有什么区别? I know that operators are slightly different, as this example ......

fyin1314
今天
20
0
之间的区别 和

问题: I'm learning Spring 3 and I don't seem to grasp the functionality behind <context:annotation-config> and <context:component-scan> . 我正在学习Spring 3,并且似乎不太了解<......

javail
今天
15
0
业内首款,百度工业视觉智能平台全新亮相

本文作者:y****n 业内首款全国产化工业视觉智能平台——百度工业视觉智能平台亮相中国机器视觉展(Vision China),该平台所具有的核心AI能力完全自主可控,在质检、巡检等场景中具有高效、...

百度开发者中心
昨天
7
0
我们如何制作xkcd样式图? - How can we make xkcd style graphs?

问题: Apparently, folk have figured out how to make xkcd style graphs in Mathematica and in LaTeX . 显然,民间已经想出了如何在Mathematica和LaTeX中制作xkcd风格的图形。 Can we d......

富含淀粉
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部