1. 程式人生 > >一些常用的正則表示式

一些常用的正則表示式

常用的正則表示式

匹配中文字元的正則表示式: [\u4e00-\u9fa5]

匹配雙位元組字元(包括漢字在內):[^\x00-\xff]

匹配空行的正則表示式:\n[\s| ]*\r

匹配HTML標記的正則表示式:/<(.*)>.*<\/\1>|<(.*) \/>/ 

匹配首尾空格的正則表示式:(^\s*)|(\s*$)

匹配IP地址的正則表示式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //

匹配Email地址的正則表示式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

網址URL的正則表示式:http://(/

[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

sql語句:^(select|drop|delete|create|update|insert).*$

1、非負整數:^\d+$ 

2、正整數:^[0-9]*[1-9][0-9]*$ 

3、非正整數:^((-\d+)|(0+))$ 

4、負整數:^-[0-9]*[1-9][0-9]*$ 

5、整數:^-?\d+$ 

6、非負浮點數:^\d+(\.\d+)?$ 

7、正浮點數:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 

8、非正浮點數:^((-\d+\.\d+)?)|(0+(\.0+)?))$ 

9、負浮點數:^(-((正浮點數正則式)))$ 

10、英文字串:^[A-Za-z]+$ 

11、英文大寫串:^[A-Z]+$ 

12、英文小寫串:^[a-z]+$ 

13、英文字元數字串:^[A-Za-z0-9]+$ 

14、英數字加下劃線串:^\w+$ 

15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ 

16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$ 

或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$

17、郵政編碼:^[1-9]\d{5}$

18、中文:^[\u0391-\uFFE5]+$

19、電話號碼:^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$

20、手機號碼:^((\d2,3)|(\d{3}\-))?13\d{9}$

21、雙位元組字元(包括漢字在內):^\x00-\xff

22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那樣的trim函式)

23、匹配HTML標記:<(.*)>.*<\/\1>|<(.*) \/> 

24、匹配空行:\n[\s| ]*\r

25、提取資訊中的網路連結:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?

26、提取資訊中的郵件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

27、提取資訊中的圖片連結:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?

28、提取資訊中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)

29、提取資訊中的中國手機號碼:(86)*0*13\d{9}

30、提取資訊中的中國固定電話號碼:(\d3,4|\d{3,4}-|\s)?\d{8}

31、提取資訊中的中國電話號碼(包括移動和固定電話):(\d3,4|\d{3,4}-|\s)?\d{7,14}

32、提取資訊中的中國郵政編碼:1-9]{1}(\d+){5}

33、提取資訊中的浮點數(即小數):(-?\d*)\.?\d+

34、提取資訊中的任何數字 :(-?\d*)(\.\d+)? 

35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)

36、電話區號:/^0\d{2,3}$/

37、騰訊QQ號:^[1-9]*[1-9][0-9]*$

38、帳號(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

39、中文、英文、數字及下劃線:^[\u4e00-\u9fa5_a-zA-Z0-9]+$

2.案例

validator.js

/*
 * 執行正則表示式
 * @param pattern 校驗的正則表示式
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function executeExp(pattern, strValue) {
	return pattern.test(strValue);
}
//驗證手機號碼
function isMobile(strValue) {
	if(isEmpty(strValue))
		return false;
	var pattern = /^(13|14|15|17|18|19)[0-9]{9}$/;
	return pattern.test(strValue);
}
//驗證數字	
function isNumber(strValue) {
	if(isEmpty(strValue))
		return false;
	var pattern = /^[1-9]\d*$|^0$/;
	return pattern.test(strValue);
}
//驗證是否為空
function isEmpty(strValue) {
	strValue = jQuery.trim(strValue);
	return strValue.length == 0;
}
/**
 * 判斷字串是否非空
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function isNotEmpty(strValue) {
	return !isEmpty(strValue);
}
/**
 * 判斷是否是正確的日期,正確格式為:yyyy-mm-dd或者yyyy/mm/dd
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function isDate(strValue) {
	if(isEmpty(strValue)) {
		return false
	}
	var r = strValue.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
	if(r == null)
		return false;
	var d = new Date(r[1], r[3] - 1, r[4]); //?
	return(d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);
}
/**
 * 判斷是否長時間,形如 (2003-12-05 13:04:06)
 * @param str 校驗的值
 * @returns {boolean}
 */
function isDateTime(str) {
	var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
	var r = str.match(reg);
	if(r == null) return false;
	var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
	return(d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6] && d.getSeconds() == r[7]);
}
/**
 * 判斷字串是否為字母或數字
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function isAlphaNumeric(strValue) {
	if(isEmpty(strValue))
		return false;
	// 只能是 A-Z a-z 0-9 之間的字母數字 或者為空
	var pattern = /^[A-Za-z0-9]+$/;
	return executeExp(pattern, strValue);
}
/**
 * 判斷是否為中文、英文、字母或_
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function isCnAndEnNumeric(strValue) {
	var pattern = /^[_0-9a-zA-Z\u4e00-\u9fa5]+$/;
	return executeExp(pattern, strValue);
}

/**
 * 判斷是否為英文、數字、字母或_
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function isEnNumeric(strValue) {
	var pattern = /^[_0-9a-zA-Z]+$/;
	return executeExp(pattern, strValue);
}

/**
 * 判斷是否為中文
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function isCnAndEn(strValue) {
	if(isEmpty(strValue))
		return false;

	var pattern = /^[\u4E00-\u9FA5]+$/;

	return executeExp(pattern, strValue);
}
/**
 * 判斷是否是貨幣
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function isMoney(strValue) {
	if(isEmpty(strValue))
		return false;
	var pattern = /^[+-]?\d+(,\d{3})*(\.\d+)?$/;
	return executeExp(pattern, strValue);
}

/**
 * 判斷是否為數字
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function isNumeric(strValue) {
	if(isEmpty(strValue))
		return false;
	var pattern = /^[0-9]*$/;
	return executeExp(pattern, strValue);
}

/**
 * 判斷是否為浮點數(不帶正負號)
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function isNumberFloat(strValue) {
	if(isEmpty(strValue))
		return false;
	var pattern = /^\d+(\.\d+)?$/;
	return executeExp(pattern, strValue);
}
/**
 * 判斷是否為固話
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function isTel(strValue) {
	if(isEmpty(strValue))
		return false;
	var pattern = /^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/;
	return executeExp(pattern, strValue);
}

/**
 * 判斷是否為電話
 * @param strValue 校驗的值
 * @returns {boolean}
 */
function isPhone(strValue) {
	if(isEmpty(strValue))
		return false;
	var pattern = /(^\(\d{3,5}\)\d{6,8}(-\d{2,8})?$)|(^\d+-\d+$)|(^(13|14|15|17|18)[0-9]{9}$)/;
	return executeExp(pattern, strValue);
}
/**
 * 判斷是否是幾位小數,比如1.02、1.341、0.3143等格式
 * @param strValue 校驗的值
 * @param posiNum 表示要校驗幾位,可不傳,預設為2位
 * @returns {boolean}
 */
function isFormatNumber(strValue, posiNum) {
	if(isEmpty(strValue))
		return false;
	posiNum = typeof posiNum != "undefined" ? posiNum : 2;
	var pattern = new RegExp("^[0-9]+\.[0-9]{" + posiNum + "}$");;
	return pattern.test(strValue);
}
//驗證郵箱
function isEmail(strValue) {
	if(isEmpty(strValue))
		return false;
	var pattern = /^(\w-*\.*)[email protected](\w-?)+(\.\w{2,})+$/;
	//	var pattern = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"; 
	return pattern.test(strValue);
}
//驗證QQ
function isQQ(strValue) {
	if(isEmpty(strValue))
		return false;
	var pattern = /^[1-9]\d{4,9}$/;
	//	return pattern.test(strValue);
	return executeExp(pattern, strValue)
}
//驗證郵政編碼
function isZipcode(strValue) {
	if(isEmpty(strValue))
		return false;
	var pattern = /(^\d{6}$)/;
	return pattern.test(strValue)
	//	return executeExp(pattern, strValue);
}
//驗證是否為合法的URL
function isURL(strValue) {
	if(isEmpty(strValue))
		return false;
	var pattern = /^(http|https|ftp):\/\/(\w+\.)+[a-z]{2,3}(\/\w+)*(\/\w+\.\w+)*(\?\w+=\w*(&\w+=\w*)*)*/;
	return pattern.test(strValue)
}
//這個方法的作用
function strToInt(strValue) {
	while(strValue.length > 1 && strValue.substring(0, 1) == "0") {
		strValue = strValue.substring(1, strValue.length);
	}
	return parseInt(strValue);
}
//驗證身份證的有效性
function isCardID(strValue) {
	if(isEmpty(strValue)) {
		return false;
	}
	var vcity = {
		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: "國外"
	};
	console.log(vcity[11])
	//校驗長度,型別,身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最後一位是校驗位,可能為數字或字元X,也有可能是Y
	//	strValue = strValue.toUpperCase();
	var pattern = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
	if(pattern.test(strValue) == false) {
		return false;
	}
	//檢查省份
	var province = strValue.substr(0, 2);
	if(vcity[province] == undefined) {
		return false;
	}
	//身份證15位時,次序為省(3位)市(3位)年(2位)月(2位)日(2位)校驗位(3位),皆為數字
	var len = strValue.length;
	if(len == 15) {
		var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
		var arr_data = strValue.match(re_fifteen);
		console.log(arr_data);
		var year = strToInt('19' + arr_data[2]); //為什麼加上19
		console.log(year)
		var month = strToInt(arr_data[3]);
		console.log(month)
		var day = strToInt(arr_data[4]);
		console.log(day)
		var birthday = new Date('19' + year + '/' + month + '/' + day);
		console.log(birthday)
		//var birthday = new Date();
		birthday.setFullYear(year);
		birthday.setMonth(month - 1);
		birthday.setDate(day);
		var now = new Date();
		var now_year = now.getFullYear();
		//年月日是否合理
		if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) { //這句判斷有什麼用
			var time = now - now_year;
			if(time >= 3 && time <= 100) {
				return false;
			}
		} else {
			return true;
		}
	}
	//身份證18位時,次序為省(3位)市(3位)年(4位)月(2位)日(2位)校驗位(4位),校驗位末尾可能為X
	if(len == 18) {
		var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
		var arr_data = strValue.match(re_eighteen);
		var year = strToInt(arr_data[2]);
		var month = strToInt(arr_data[3]);
		var day = strToInt(arr_data[4]);
		var birthday = new Date(year + '/' + month + '/' + day);
		//var birthday = new Date();
		birthday.setFullYear(year);
		birthday.setMonth(month - 1);
		birthday.setDate(day);
		var now = new Date();
		var now_year = now.getFullYear();
		//年月日是否合理
		if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) {
			//判斷年份的範圍(3歲到100歲之間)
			var time = now_year - year;
			if(!(time >= 3 && time <= 100)) {
				return false;
			}
		} else {
			return false;
		}
	}
	//檢驗位的檢測
	//15位轉18位
	if(strValue.length == 15) {
		var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
		var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
		var cardTemp = 0,
			i;
		strValue = strValue.substr(0, 6) + '19' + strValue.substr(6, strValue.length - 6);
		for(i = 0; i < 17; i++) {
			cardTemp += strValue.substr(i, 1) * arrInt[i];
		}
		strValue += arrCh[cardTemp % 11];
	}
	if(strValue.length == 18) {
		var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
		var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
		var cardTemp = 0,
			i, valnum;
		for(i = 0; i < 17; i++) {
			cardTemp += parseInt(strValue.substr(i, 1)) * arrInt[i];
		}
		valnum = arrCh[cardTemp % 11];
		if(!(valnum == strValue.substr(17, 1))) {
			return false;
		}
	}
	return true;
}

login.js

if(!isMobile(uname.trim())) {
			   console.log('請輸入正確的手機號碼')
				return false;
			}

其他的都按這中方式來引用