
<?php /** * 是否是一个有效的字典名称 * @param [type] $str [description] * @return boolean [description] */ function is_dict_name($str) { return regex($str, '/^[a-zA-Z_][a-zA-Z0-9_]{1,255}$/'); } /** * 是否是一个有效的手机号码 * @param string $str 被验证的字符串 * @return boolean */ function is_mobile($str) { return regex($str, 'mobile'); } /** * 是否是一个有效的传真 * @param string $str 被验证的字符串 * @return boolean */ function is_fax($str) { return regex($str, 'fax'); } /** * 是否是一个有效的邮箱地址 * @param [type] $str [description] * @return boolean [description] */ function is_email($str) { return regex($str, 'email'); } /** * 是否是一个有效的邮政编码 * @param [type] $str [description] * @return boolean [description] */ function is_zip($str) { return regex($str, 'zip'); } /** * 是否是由数字组成 * @param [type] $str [description] * @return boolean [description] */ function is_number($str) { return regex($str, 'number'); } /** * 是否是一个有效的真实姓名 * @param [type] $str [description] * @return boolean [description] */ function is_true_name($str) { $len = mb_strlen($str, 'utf-8'); if ($len > 50 || $len < 2) { return false; } else { return true; } } /** * 是否是一个有效的昵称 * @param [type] $str [description] * @return boolean [description] */ function is_nickname($str) { $len = mstrlen($str); if ($len > 50 || $len < 2) { return false; } else { return true; } } /** * 是否是一个有效的编号 * @param [type] $str [description] * @return boolean [description] */ function is_code($str) { return regex($str, '/^\d{20}$/'); } /** * 是否是一个有效的用户名 * 4-20字节,汉字占2字节,不区分大小写 * @param string $username 被验证字符串 * @return boolean */ function is_user_name($username) { $guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8'; $len = mstrlen($username); if ($len > 20 || $len < 4 || preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|$guestexp/is", $username)) { return false; } if (is_mobile($username) || is_email($username)) { return false; } return true; } /** * 是否是一个有效的密码 * 6-16位,数字、字母、符号,区分大小写 * @param string $str 被验证字符串 * @return boolean */ function is_password($str) { $sample = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $sample .= "abcdefghijklmnopqrstuvwxyz"; $sample .= "0123456789"; $sample .= "`~!@#\$%^&*()-_=+\\|{}[]:;\"'<>,.?/"; $len = strlen($str); if ($len < 6 || $len > 16) { return false; } for ($i = 0; $i < $len; $i++) { $each_char = mb_substr($str, $i, 1); if (substr_count($sample, $each_char) == 0) { return false; } } return true; } /** * 是否是一个有效的时间 * 格式为 YYYY-MM-DD HH:NN:SS * @param string $str 被验证字符串 * @return boolean */ function is_time($str) { $arr = explode(' ', $str); if (count($arr) < 1 && count($arr) > 2) { return false; } if (false === is_date($arr[0])) { return false; } if (count($arr) > 1) { $time_arr = explode(':', $arr[1]); if (count($time_arr) < 1 || count($time_arr) > 3) { return false; } if (!regex($time_arr[0], 'number') || intval($time_arr[0]) >= 24 || intval($time_arr[0]) < 0) { return false; } if (count($time_arr) > 1) { if (!regex($time_arr[1], 'number') || intval($time_arr[1]) >= 60 || intval($time_arr[1]) < 0) { return false; } } if (count($time_arr) > 2) { if (!regex($time_arr[2], 'number') || intval($time_arr[2]) >= 60 || intval($time_arr[2]) < 0) { return false; } } } return true; } /** * 是否是一个有效的日期 * 格式 YYYT-MM-DD * @param string $str 被验证字符串 * @return boolean */ function is_date($str) { $str = trim($str); if (!regex($str, 'date')) { return false; } $dateArr = explode('-', $str); return checkdate(intval($dateArr[1]), intval($dateArr[2]), intval($dateArr[0])); } /** * 使用正则验证数据 * @param string $value 要验证的数据 * @param string $rule 验证规则 * @return boolean */ function regex($value, $rule) { $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]+$/', 'mobile' => '/^1{1}\d{10}$/', 'date' => '/\d{4}-\d{1,2}-\d{1,2}/', 'funcname' => '/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/u', 'slug' => '/^[a-zA-Z_][a-zA-Z0-9_]{0,50}$/', 'fax' => '/(^[0-9]{3,4}\-[0-9]{7,8}\-[0-9]{3,4}$) |(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}\-[0-9]{3,4}$)|(^[0-9]{7,15}$)/', ); // 检查是否有内置的正则表达式 if (isset($validate[strtolower($rule)])) { $rule = $validate[strtolower($rule)]; } return preg_match($rule, $value) === 1; } /** * 金额验证 */ function is_money($str) { return regex($str, 'currency'); } /** * 身份证验证 */ function is_id_card($str) { if (trim($str) == '') { return false; } else { return true; } } function is_id_card1($vStr) { $vCity = array( '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', ); if (!preg_match('/^([\d]{17}[xX\d]|[\d]{15})$/', $vStr)) { return false; } if (!in_array(substr($vStr, 0, 2), $vCity)) { return false; } $vStr = preg_replace('/[xX]$/i', 'a', $vStr); $vLength = strlen($vStr); if ($vLength == 18) { $vBirthday = substr($vStr, 6, 4) . '-' . substr($vStr, 10, 2) . '-' . substr($vStr, 12, 2); } else { $vBirthday = '19' . substr($vStr, 6, 2) . '-' . substr($vStr, 8, 2) . '-' . substr($vStr, 10, 2); } if (date('Y-m-d', strtotime($vBirthday)) != $vBirthday) { return false; } if ($vLength == 18) { $vSum = 0; for ($i = 17; $i >= 0; $i--) { $vSubStr = substr($vStr, 17 - $i, 1); $vSum += (pow(2, $i) % 11) * (($vSubStr == 'a') ? 10 : intval($vSubStr, 11)); } if ($vSum % 11 != 1) { return false; } } return true; }