1、是否是合法的身份证:
/** * 身份证号验证(兼容15,18位) * @param string $idcard * @return empty|$idcard */ function isIdCardNo($idcard = '') { $idcard = trim($idcard); if (empty($idcard)) { return ''; } $City = [ 11 => "北京", 12 => "天津", 13 => "河北", 14 => "山西", 15 => "内蒙古", 21 => "辽宁", 22 => "吉林", 23 => "黑龙江", 31 => "上海", 32 => "江苏", 33 => "浙江", 34 => "安徽", 35 => "福建", 36 => "江西", 37 => "山东", 41 => "河南", 42 => "湖北", 43 => "湖南", 44 => "广东", 45 => "广西", 46 => "海南", 50 => "重庆", 51 => "四川", 52 => "贵州", 53 => "云南", 54 => "西藏", 61 => "陕西", 62 => "甘肃", 63 => "青海", 64 => "宁夏", 65 => "新疆", 71 => "台湾", 81 => "香港", 82 => "澳门", 91 => "国外" ]; $idCardLength = strlen($idcard); //长度验证 if (!preg_match('/^\d{17}(\d|x)$/i', $idcard) and !preg_match('/^\d{15}$/i', $idcard)) { return ''; } //地区验证 if (!array_key_exists(intval(substr($idcard, 0, 2)), $City)) { return ''; } // 15位身份证验证生日,转换为18位 if ($idCardLength == 15) { $sBirthday = '19' . substr($idcard, 6, 2) . '-' . substr($idcard, 8, 2) . '-' . substr($idcard, 10, 2); $d = new DateTime($sBirthday); $dd = $d->format('Y-m-d'); if ($sBirthday != $dd) { return ''; } $idcard = substr($idcard, 0, 6) . "19" . substr($idcard, 6, 9);//15to18 $Bit18 = getVerifyBit($idcard);//算出第18位校验码 $idcard = $idcard . $Bit18; } // 判断是否大于2078年,小于1900年 $year = substr($idcard, 6, 4); if ($year < 1900 || $year > 2078) { return ''; } //18位身份证处理 $sBirthday = substr($idcard, 6, 4) . '-' . substr($idcard, 10, 2) . '-' . substr($idcard, 12, 2); $d = new DateTime($sBirthday); $dd = $d->format('Y-m-d'); if ($sBirthday != $dd) { return ''; } //身份证编码规范验证 $idcard_base = substr($idcard, 0, 17); if (strtoupper(substr($idcard, 17, 1)) != getVerifyBit($idcard_base)) { return ''; } return $idcard; } /* * 计算身份证校验码,根据国家标准GB 11643-1999 */ function getVerifyBit($idcard_base) { if (strlen($idcard_base) != 17) { return false; } //加权因子 $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); //校验码对应值 $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); $checksum = 0; for ($i = 0; $i < strlen($idcard_base); $i++) { $checksum += substr($idcard_base, $i, 1) * $factor[$i]; } $mod = $checksum % 11; $verify_number = $verify_number_list[$mod]; return $verify_number; }
2、是否是域名或ip:
/** * 校验域名或IP * @param string $name * @return bool */ function checkDomain($name){ $regIP = '/^([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$/' ; $regDomain = '/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/' ; if(preg_match($regIP,$name) || preg_match($regDomain, $name)){ return true; } else{ return false; } }
3、是否是手机号码:
/** * 是否是手机号码 */ $phone_regx = '/^1[35789]\d{9}$/'; if(preg_match($phone_regx, $kw)){ echo "手机号码格式正确<br/>" ; }else{ echo "手机号码格式不正确<br/>" ; }
4、是否是邮箱:
/** * 是否是邮箱 * @return bool */ function verifyEmail($str){ //@前面的字符可以是英文字母和._- ,._-不能放在开头和结尾,且不能连续出现 $pattern = '/^[a-z0-9]+([._-][a-z0-9]+)*@([0-9a-z]+\.[a-z]{2,14}(\.[a-z]{2})?)$/i'; if(preg_match($pattern,$str)){ return true; }else{ return false; } }
5、是否是全中文:
//是否是全中文,需要是UTF-8编码 $chinese_regx = '/^[\x{4e00}-\x{9fa5}]+$/u'; if(preg_match($chinese_regx, $str)){ echo "中文字符匹配正确<br/>" ; }else{ echo "中文字符匹配不正确<br/>" ; }
6、是否含有中文:
$has_zh = '/[\x7f-\xff]/'; if(preg_match($has_zh, $str)){ echo "含有中文<br/>" ; }else{ echo "不含有中文<br/>" ; }
7、是否有重复字符:
//UTF-8 字符串中是否有重复字符 $repeat_regx = '/^(\w)\1+(\d)\2+$/'; //UTF-8 if(preg_match($repeat_regx, $str)){ echo "重复字符匹配正确<br/>" ; }else{ echo "重复字符匹配不正确<br/>" ; }
8、过滤HTML注释:
$str = preg_replace('#<!--[^\!\[]*?(?<!\/\/)-->#','',$str);
9、URL中是否带http/https:
if (!preg_match('/^http(s)?:\\/\\/.+/',$url)) { echo '不带http/https'; } else { echo '带http/https'; }
转载请注明本文标题和链接:《 PHP常用正则表达式记录(长期更新) 》
网友评论 0