PHP中正则表达式回顾(3)--编写一个简单的正则表达式工具类

    跟着视频的讲解,也亲手敲了这么一个正则表达式的类,感觉很不错,真是温故而知新,本来想把注释写的逼格高一点的,今天晚了有点累,先简单的写一下,有时间了再完善完善。

<?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}$/',
		);
	
	/*******************
	*定义返回的结果,是定义是否匹配还是要得到匹配的结果
	*当为false的时候验证结果,是true or false  即是否匹配到
	*****************/
	private $returnMatchResult	=	false;
	
	//定义修正模式,默认为空
	private $fixMode	=	null;
	
	//匹配的结果数组
	//验证匹配的结果,如果成功是true 否则 是false
	private $isMatch	=	false;
	
	//用于存放匹配到的数据
        private $matches = array();
	
	//构造函数 两个参数 定义返回结果类型,和修正模式
	public function __construct($returnMatchResult	=	false,$fixMode	=	null){
		$this->returnMatchResult=$returnMatchResult;	//赋值给成员属性
		$this->fixMode=$fixMode;
	}
	
	/********************************
	*核心匹配方法	第一个参数正则表达式,第二个是目标数据
	*	$pattern 如果在成员属性$validate中,就直接使用现成的表达式,不存在就当他自己是表达式
	**************************/
	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();
	}
	
	//根据getRegexResult,返回不同的结果
	private function getRegexResult(){
		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);
	}
	
	//验证email
	public function isEmail($str){
		return $this->regex('email',$str);
	}
	
	//验证手机号
	public function isMobile($str){
		return $this->regex('mobile',$str);
	}
	
	//用户自定义正则表达式
	public function check($pattern,$subject){
		return $this->regex($pattern,$subject);
	}
}
	
	//实际操作一下,效果还是棒棒哒^_^
	$regex = new regexTool();
	$regex -> setFixMode('U');
	$isEmail=$regex -> isEmail('[email protected]');
	$isMobile=$regex -> isMobile('56481513');
	var_dump($isEmail);
	echo '<hr/>';
	var_dump($isMobile);

    经过测试了,应该没有问题。

你可能感兴趣的:(PHP,正则表达式)