1. 程式人生 > >正則表示式(一):php常用的正則匹配

正則表示式(一):php常用的正則匹配

function pregPN($test){
		/**
			匹配手機號碼
			規則:
				手機號碼基本格式:
				前面三位為:
				移動:134-139 147 150-152 157-159 182 187 188
				聯通:130-132 155-156 185 186
				電信:133 153 180 189
				後面八位為:
				0-9位的數字
		*/
		
		$rule  = "/^((13[0-9])|147|(15[0-35-9])|180|182|(18[5-9]))[0-9]{8}$/A";
		preg_match($rule,$test,$result);
		return $result;
	}
function pregE($test){
		/**
		匹配郵箱
		規則:
			郵箱基本格式是  *****@**.**
			@以前是一個 大小寫的字母或者數字開頭,緊跟0到多個大小寫字母或者數字或 . _ - 的字串
			@之後到.之前是 1到多個大小寫字母或者數字的字串
			.之後是 1到多個 大小寫字母或者數字或者.的字串
		*/
		$zhengze = '/^[a-zA-Z0-9][a-zA-Z0-9._-]*\@[a-zA-Z0-9]+\.[a-zA-Z0-9\.]+$/A';
		preg_match($zhengze,$test,$result);
		return $result;
	}

	function pregTP($test){
		/**
		電話號碼匹配
		電話號碼規則:
			區號:3到5位,大部分都是四位,北京(010)和上海市(021)三位,西藏有部分五位,可以包裹在括號內也可以沒有
			如果有區號由括號包裹,則在區號和號碼之間可以有0到1個空格,如果區號沒有由括號包裹,則區號和號碼之間可以有兩位長度的 或者-
			號碼:7到8位的數字
			例如:(010) 12345678  或者 (010)12345678 或者 010  12345678 或者 010--12345678 
		*/
		$rule = '/^(\(((010)|(021)|(0\d{3,4}))\)( ?)([0-9]{7,8}))|((010|021|0\d{3,4}))([- ]{1,2})([0-9]{7,8})$/A';
		preg_match($rule,$test,$result);
		return $result;
	}
	

function pregURL($test){
		/**
			匹配url
			url規則:
				例
				協議://域名(www/tieba/baike...).名稱.字尾/檔案路徑/檔名
				http://zhidao.baidu.com/question/535596723.html
				協議://域名(www/tieba/baike...).名稱.字尾/檔案路徑/檔名?引數
				www.lhrb.com.cn/portal.php?mod=view&aid=7412
				協議://域名(www/tieba/baike...).名稱.字尾/檔案路徑/檔名/引數
				http://www.xugou.com.cn/yiji/erji/index.php/canshu/11
				
				協議:可有可無,由大小寫字母組成;不寫協議則不應存在://,否則必須存在://
				域名:必須存在,由大小寫字母組成
				名稱:必須存在,字母數字漢字
				字尾:必須存在,大小寫字母和.組成
				檔案路徑:可有可無,由大小寫字母和數字組成
				檔名:可有可無,由大小寫字母和數字組成
				引數:可有可無,存在則必須由?開頭,即存在?開頭就必須有相應的引數資訊
		*/
		$rule = '/^(([a-zA-Z]+)(:\/\/))?([a-zA-Z]+)\.(\w+)\.([\w.]+)(\/([\w]+)\/?)*(\/[a-zA-Z0-9]+\.(\w+))*(\/([\w]+)\/?)*(\?(\w+=?[\w]*))*((&?\w+=?[\w]*))*$/';
		preg_match($rule,$test,$result);
		return $result;
	}

function pregIC($test){
		/**
		匹配身份證號
		規則:
			15位純數字或者18位純數字或者17位數字加一位x
		*/
		$rule = '/^(([0-9]{15})|([0-9]{18})|([0-9]{17}x))$/';		
		preg_match($rule,$test,$result);
		return $result;
	}

function pregPOS($test){
	/**
		匹配郵編
			規則:六位數字,第一位不能為0
	*/
		$rule ='/^[1-9]\d{5}$/';
		preg_match($rule,$test,$result);
		return $result;
	}

function pregIP($test){
		/**
		匹配ip
		規則:
			**1.**2.**3.**4
			**1可以是一位的 1-9,兩位的01-99,三位的001-255
			**2和**3可以是一位的0-9,兩位的00-99,三位的000-255
			**4可以是一位的 1-9,兩位的01-99,三位的001-255
			四個引數必須存在
		*/
		$rule = '/^((([1-9])|((0[1-9])|([1-9][0-9]))|((00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))))\.)((([0-9]{1,2})|(([0-1][0-9]{2})|(2[0-4][0-9])|(25[0-5])))\.){2}(([1-9])|((0[1-9])|([1-9][0-9]))|(00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5])))$/';
		preg_match($rule,$test,$result);
		return $result;
	}

function pregTI($test){
		/**
		匹配時間
			規則:
				形式可以為:
				年-月-日 小時:分鐘:秒
				年-月-日 小時:分鐘
				年-月-日
				年:1或2開頭的四位數
				月:1位1到9的數;0或1開頭的兩位數,0開頭的時候個位數是1到9的數,1開頭的時候個位數是1到2的數
				日:1位1到9的數;0或1或2或3開頭的兩位數,0開頭的時候個位數是1到9的數,1或2開頭的時候個位數是0到9的數,3開頭的時候個位數是0或1
				小時:0到9的一位數;0或1開頭的兩位數,個位是0到9;2開頭的兩位數,個位是0-3
				分鐘:0到9的一位數;0到5開頭的兩位數,個位是0到9;
				分鐘:0到9的一位數;0到5開頭的兩位數,各位是0到9
		*/
		$rule ='/^(([1-2][0-9]{3}-)((([1-9])|(0[1-9])|(1[0-2]))-)((([1-9])|(0[1-9])|([1-2][0-9])|(3[0-1]))))( ((([0-9])|(([0-1][0-9])|(2[0-3]))):(([0-9])|([0-5][0-9]))(:(([0-9])|([0-5][0-9])))?))?$/';
		preg_match($rule,$test,$result);
		return $result;
	}


	function pregCh($test){
	//utf8下匹配中文
		$rule ='/([\x{4e00}-\x{9fa5}]){1}/u';
		preg_match_all($rule,$test,$result);
		return $result;
	}