用到的一些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)