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