跟着视频的讲解,也亲手敲了这么一个正则表达式的类,感觉很不错,真是温故而知新,本来想把注释写的逼格高一点的,今天晚了有点累,先简单的写一下,有时间了再完善完善。
<?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(‘[email protected]‘); $isMobile=$regex -> isMobile(‘56481513‘); var_dump($isEmail); echo ‘<hr/>‘; var_dump($isMobile);
经过测试了,应该没有问题。
时间: 2024-10-25 04:44:30