PHP 常用正则

未结帖
0 628
ajian lucy 2014-06-14
悬赏:5飞吻
<?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;
}


热忱回答0


最近热帖

近期热议

  1. javascript——prototype与__proto 9
  2. Mysql 中出现的Data truncated for column 3
  3. 在nginx中使用x-sendfile的解决方案 3
  4. 高版本jQuery面插件实现Ajax上传图片 1
  5. Thinkphp Socket.class.php 类的使用 1
  6. 使用ionic3创建第一个App 0
  7. ios-oc html5 0
  8. nginx.conf 0
  9. 基于ionic3.4.0的项目搭建 0
  10. php 缩略图 0