* 类MatchAll功能:主要用于php日常所用到的几种检测匹配或提取特定字符.//
* 主要参数设置说明: $target_str 为目标字符即需要检测的字符或数字。//
* $isFind true:提取出匹配字符;false:单纯检测是否存在特定字符. //
* $isTotal true: 完全匹配模式;false:部分匹配模式. //
* @author: purpen //
* @email: purpen.w@gmail.com //
* @data: 2007-07-29 //
*/////////////////////////////////////////////////////
class MatchAll {
/**
* 功能: 用于检测IP地址是否合法或从字符串中提取IP字符.
*
* @param string $target_str
* @param boolean $isFind
* @param boolean $isTotal
* @return mixed
*/
public static function IP_match($target_str, $isFind=false, $isTotal=false) {
//采取的匹配模式
if ($isTotal == true) {
$pattern = "/^(\d{1,3}\.){3}\d{1,3}$/";
}else{
$pattern = "/(\d{1,3}\.){3}\d{1,3}/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能: 用于检测×××号是否合法或从字符串中提取出×××号字符.
*
* @param mixed $target_str
* @param boolean $isFind
* @param boolean $isTotal
* @return mixed
*/
public static function IDCard_match($target_str, $isFind=false, $isTotal=false){
//采取的匹配模式
if ($isTotal == true){
$pattern = "/^(\d{18}|\d{17}X|\d{15})$/";
}else{
$pattern = "/(\d{18}|\d{17}X|\d{15})/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能: 用于检测电话号码是否合法或从字符长串中提取出电话号码.
* @param mixed $target_str
* (例如: 010-87965421、(010)87965421、87965421、0394-5568447、(0394)5568447、5568447)
* @param boolean $isFind
* @param boolean $isTotal
* @return mixed
*/
public static function phone_match($target_str, $isFind=false, $isTotal=false) {
//采用匹配模式
if ($isTotal == true) {
$pattern = "/^((\(?\d{3,4}\))?|(\d{3,4}-)?)\d{7,8}$/";
}else{
$pattern = "/((\(?\d{3,4}\))?|(\d{3,4}-)?)\d{7,8}/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能:用于检测邮政编码是否合法或从字符长串中提取出邮政编码字符.
*
* @param mixed $target_str
* @param boolean $isFind
* @param boolean $isTotal
* @return mixed
*/
public static function postalcode_match($target_str, $isFind=false, $isTotal=false) {
//采取的匹配模式
if ($isTotal == true) {
$pattern = "/^\d{6}$/";
}else{
$pattern = "/\d{6}/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能: 用于完全匹配、部队匹配或提出网络url的方法.
* @param string $target_str
* @param boolean $isFind 是否提取出匹配目标
* @param boolean $isTotal 是否完全匹配
* @return mixed
*/
public static function neturl_match ($target_str, $isFind=false, $isTotal=false) {
//采用的匹配模式
if ($isTotal == true) {
$pattern = "/^(http\:\/\/)?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*.+$/";
}else{
$pattern = "/(http\:\/\/)?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能: 用于检测email是否合法或从字符串中提取出email字符串.
* @param string $target_str
* @param boolean $isFind 是否提取出字符串
* @param boolean $isTotal是否完全匹配
* @return mixed
*/
public static function email_match ($target_str, $isFind=false, $isTotal=false){
//采取的匹配模式
if ($isTotal == true){
$pattern = "/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*$/";
}else{
$pattern = "/[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能:用于完全匹配、部分匹配或提取出钱币数字的方法.
* @param mixed $target_str
* @param boolean $isFind
* @param boolean $isTotal
* @return mixed
*/
public static function money_match($target_str, $isFind=false, $isTotal=false) {
//采用完全匹配
if ($isTotal == true) {
$pattern = "/^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?$/";
}else{//部分匹配
$pattern = "/[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能:开始匹配目标字符串动作.
*
* @param mixed $target_str
* @param string $pattern
* @param boolean $isFind
* @return mixed
*/
public function get_match_result($target_str, $pattern, $isFind) {
//是否提取出匹配目标
if ($isFind == true) {
preg_match($pattern, $target_str, $result);
}else{
$result = preg_match($pattern, $target_str);
}
return $result;
}
/**
* 功能: 用于匹配测试
* @param str $target_str //$target_str = "select a, b, c, d from d";
*/
public function all_match($target_str) {
$pattern = "/select(.+)from(\s[a-zA-Z0-9])/i";
preg_match($pattern, $target_str, $result);
$fields = split(",", $result[1]);
print $result[2];
print "";
return $fields;
}
}