用到的一些php正则表达式,不断更新记录
在写代码的过程中用到的一些正则表达式,记录下来方便今后再次使用,有用到新的或者更好的正则就更新上来,20170802更新
/** * 验证url正则 * 支持https/http 匹配 ip形式url匹配 二级域名匹配 端口匹配 * 如 https://php.zhangxingju.com:80 返回true * @param string $str 需要验证的url * @return bool 匹配则返回true */ function is_url($str){ $RegExp= '/^(http[s]?:\/\/)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*\'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.'. '[a-z]{2,6})(:[0-9]{1,4})?((\/\?)|(\/[0-9a-zA-Z_!~\'\.;\?:@&=\+\$,%#-\/^\*\|]*)?)$/'; return preg_match($RegExp,$str)?true:false; }
/** * 验证QQ正则 * 如 971328672 返回true * @param string $str 需要验证的QQ * @return string 匹配则返回QQ的字符串$str 不匹配返回 false */ function is_qq($str){ $RegExp='/^[1-9][0-9]{4,11}$/'; return preg_match($RegExp,$str)?$str:false; }
/** * 验证中文 字母 数字 下划线 且下划线不能再开头和结尾 正则 * 如 #ffd 返回false * @param string $str 需要验证的字符串 * @return bool 匹配则返回true */ function is_chinese_alphanumeric_underline($str){ $RegExp ='/^(?!_)[\{x4e00}-\x{9fa5}A-Za-z0-9_]\w*(?<!_)$/u'; //加u是为了中文字 十六进制显示 return preg_match($RegExp,$str)?true:false; }
/** * 验证大于0的正整数 正则 * @param string $str 需要验证的字符串 * @return bool 匹配则返回true */ function is_positive_integer($str){ $RegExp ='/^\+?[1-9]\d*$/'; return preg_match($RegExp,$str)?true:false; }
/** * 验证邮箱地址 正则 * 支持vip.qq.com com.cn类型的多后缀的邮箱验证 * @param string $str 需要验证的邮箱地址 * @return bool 匹配则返回true */ function is_mail($str){ $RegExp='/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i'; return preg_match($RegExp,$str)?true:false; }
/** * 验证中国手机号码 正则 * @param string $str 需要验证的手机号 * @return string 匹配则返回手机号 */ function is_mobile($str){ $RegExp='/^(?:13|14|15|17|18)[0-9]{9}$/'; $RegExp2='/^(?:008869)[0-9]{8}$/'; //台湾手机号效验,内地拨打需要加886 return preg_match($RegExp,$str)?$str:preg_match($RegExp2,$str)?$str:false; }
/** * 不能包含特殊字符 /:*?“<> | 正则 * @param string $str 需要验证的字符串 * @return bool 包含特殊字符则返回true */ function is_special_character($str){ $RegExp ='/\/|\:|\*|\?|\"|\<|\>|\ |\|/'; return preg_match($RegExp,$str)?true:false; }
/** * 匹配字符串中的 加减乘除括号 拆分成数组 * PREG_SPLIT_DELIM_CAPTURE 用于分隔的模式中的括号表达式将被捕获并返回。记不清我当时是为了什么情况加这个了。。。 */ $str = 'test_1482888719854+2/test_1483415210840'; $arr = array_filter(preg_split('/(\+|\-|\)|\(|\*|\/)/im', $str, null, PREG_SPLIT_DELIM_CAPTURE)); var_dump($arr); array (size=5) 0 => string 'test_1482888719854' (length=18) 1 => string '+' (length=1) 2 => string '2' (length=1) 3 => string '/' (length=1) 4 => string 'test_1483415210840' (length=18)