标签:
跟着视频的讲解,也亲手敲了这么一个正则表达式的类,感觉很不错,真是温故而知新,本来想把注释写的逼格高一点的,今天晚了有点累,先简单的写一下,有时间了再完善完善。
<?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;
//构造函数 两个参数 定义返回结果类型,和修正模式
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(‘adfasda@qq.com‘);
$isMobile=$regex -> isMobile(‘56481513‘);
var_dump($isEmail);
echo ‘<hr/>‘;
var_dump($isMobile);
经过测试了,应该没有问题。
标签:
原文地址:http://my.oschina.net/woshixiaomayi/blog/508613