Bootstrap

常见的正则表达式验证(身份证、邮箱、电话验证等)

export default {
	// 处理图片地址
	getImg:function(imgurl) {
		let url = ""
		if (imgurl) {
			if (imgurl.indexOf('http') > -1) {
				url = imgurl
			} else {
				url = uni.getStorageSync('IMG_URL') + imgurl
			}
		} else {
			url = '/static/distance-learning/banner.png'
		}
		return url
	},
	
	// URL验证的情况包括IP,域名(domain),ftp,二级域名,域名中的文件,域名加上端口!用户名等等信息
	IsURL(str_url) {
		let strRegex =
			"^((https|http|ftp|rtsp|mms)?://)" +
			"?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" + //ftp的user@
			"(([0-9]{1,3}.){3}[0-9]{1,3}" + // IP形式的URL- 199.194.52.184
			"|" + // 允许IP和DOMAIN(域名)
			"([0-9a-z_!~*'()-]+.)*" + // 域名- www.
			"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]." + // 二级域名
			"[a-z]{2,6})" + // first level domain- .com or .museum
			"(:[0-9]{1,4})?" + // 端口- :80
			"((/?)|" + // a slash isn't required if there is no file name
			"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
		let re = new RegExp(strRegex);
		//re.test()
		if (re.test(str_url)) {
			return true;
		} else {
			return false;
		}
	},


	// 手机号验证
	phone(str) {
		// 中国电信号段开头:133、153、173、177、180、181、189、190、191、193、199
		//中国联通号段开头:130、131、132、145、155、156、166、167、171、175、176、185、186、196
		//中国移动号段开头:134(0-8)、135、136、137、138、139、1440、147、148、150、151、152、157、158、159、172、178、182、183、184、187、188、195、197、198
		//中国广电号段开头:192
		//虚拟运营商:
		// 电信:1700、1701、1702、162
		// 移动:1703、1705、1706、165
		// 联通:1704、1707、1708、1709、171、167
		// 卫星通信:1349、174
		// 物联网:140、141、144、146、148
		return new RegExp(/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/).test(str)
	},
	//座机验证
	specialPlane(str) {
		return new RegExp(/^(0[0-9]{2,3}\-)([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$/).test(str)
	},
	isOfficerCard(str) {
		// 军官证
		// 规则: 军/兵/士/文/职/广/(其他中文) + "字第" + 4到8位字母或数字 + "号"
		// 样本: 军字第2001988号, 士字第P011816X号
		// /^[\u519b](字第)([0-9a-zA-Z]{4,8})(号?)$/
		return new RegExp(/^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{4,8})(号)$/).test(str)
	},
	soldiers(str) {
		// 士兵证
		// 规则: 码前要冠以各大单位“冠字”头 + "字第" +2位军级单位编号+五位数为士兵证序号 + "号"
		// 样本: 沈字第0100000号,
		return new RegExp(/^[\u4E00-\u9FA5](字第)([0-9]{7})(号)$/).test(str)
	},
	cadreCard(str) {
		//文职干部证
		// 统一采取“军”冠字头加7位数字的形式编码
		return new RegExp(/^(军字第)([0-9]{7})(号)$/).test(str)
	},
	// 澳门身份证
	isMacauCard(str) {
		let state = false
		if (new RegExp(/^[1|5|7][0-9]{6}[(][0-9A-Z][)]$/).test(str)) {
			state = true
		} else if (new RegExp(/^[1|5|7][0-9]{6}[0-9A-Z]$/).test(str)) {
			state = true
		}
		return state
	},
	//香港身份证
	HongkongCard(str) {
		//规则:香港身份证号码由三部分组成:一个英文字母;6个数字;括号及0-9中的任一个数字,或者字母A。括号中的数字或字母A,是校验码,用于检验括号前面的号码的逻辑正确性。
		// 首位字母改为数字,即A为1,B为2,
		//例如:P103265(1),P,在字母表中排行16,则以16代表,则计算校验码:
		//16×8+1×7+0×6+3×5+2×4+6×3+5×2=186
		//186÷11=16......余10
		//11-10=1,即校验码为1。校验码等于10时是A
		let state = false
		let str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
		if (new RegExp(/^[A-Z]{1}[0-9]{6}[(]([0-9]{1}|A)[)]$/).test(str)) {

			let index1 = str1.indexOf(str[0]) + 1
			let index = index1 * 8 + str[1] * 7 + str[2] * 6 + str[3] * 5 + str[4] * 4 + str[5] * 3 + str[6] * 2
			let lastindex = str[8]
			let _lastindex = index % 11
			let lastindex1 = 11 - _lastindex
			if (lastindex == lastindex1) {
				state = true
			} else if (lastindex == 'A' && lastindex1 == 10) {
				state = true
			}
		}
		return state
	},
	// 台湾身份证
	TaiwanCard(str) {
		// 身份证号码是10码,第1码是英文字母,不同的县市用不同的字母 。第二位数字代表性别 男性是1,女性是2 。
		// 第三位到第九位为任意的一串数字,第十位为验证码
		// 通算值= 首字母对应的第一位验证码+ 首字母对应的第二位验证码 * 9 + 性别码 * 8 + 第二位数字 * 7 + 第三位数字 * 6 +第四位数字 * 5 + 第五位数字 * 4 + 第六位数字 * 3 + 第七位数字 * 2 + 第八位数字 * 1,
		// 最后一位数 =10-通算值的末尾数。
		//  台湾身份证号码第一位所代表的区域地区后面的数字为该字母转换的数字码:
		//A 台北市10  B台中市11  C基隆市12  D台南市13  E高雄市14  F 新北市15  G宜兰县16  H桃园市17 I嘉义市34 J新竹县18  K苗栗县19  M南投县21  N彰化县22  O新竹市35  P云林县23  Q嘉义县24  R台南县25  S高雄县26  T屏东县27 U花莲县28  V台东县29  W金门县32  X澎湖县30  Z连江县33已停发字母 L台中县20 R台南县25 S高雄县26 Y阳明山31
		let state = false
		let str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
		let arrstr1 = [10, 11, 12, 13, 14, 15, 16, 17, 34, 18, 19, 20, 21, 22, 35, 23, 24, 25, 26, 27, 28, 29, 32, 30, 31, 33]
		if (new RegExp(/^[A-Z]{1}(1|2)[0-9]{8}$/).test(str)) {
			let _index1 = str1.indexOf(str[0])
			let index1 = arrstr1[_index1] + ''
			let index = index1[0] * 1 + index1[1] * 9 + str[1] * 8 + str[2] * 7 + str[3] * 6 + str[4] * 5 + str[5] * 4 + str[6] *
				3 + str[7] * 2 + str[8] * 1 + ''
			indexlength = index.length - 1
			if (10 - index[indexlength] == str[9]) {
				state = true
			}
		}
		return state
	},
	// 台湾身份证
	isHKCard(str) {
		// 港澳居民来往内地通行证
		// 规则: H/M + 10位或6位数字
		// 样本: H1234567890
		let state = ''
		if (new RegExp(/^(H|M)[0-9]{6}$/).test(str)) {
			state = true
		} else if (new RegExp(/^(H|M)[0-9]{10}$/).test(str)) {
			state = true
		} else {
			state = false
		}
		return state
	},

	isTWCard(str) {
		// 台湾居民来往大陆通行证
		// 规则: 新版8位或18位数字, 旧版10位数字 + 英文字母
		// 样本: 12345678或420982199609099876 或 1234567890B
		let state = ''
		if (new RegExp(/^[0-9]{8}$/).test(str)) {
			state = true
		} else if (new RegExp(/^([0-9]{10})[A-Z]$/).test(str)) {
			state = true
		} else if (new RegExp(/^[0-9]{18}$/).test(str)) {
			state = true
		} else {
			state = false
		}
		return state
	},
	foreignIdNum(str) {
		// 外国永久居住证
		//规则,前三位字母是国籍代码,出生日期校对码为第8位至第13位数(8-9位是出生年份的后两位,10-13位是出生月日
		return new RegExp(/^[A-Z]{3}\d{12}$/).test(str)
	},

	// 用户名正则,4到16位(字母,数字,下划线,减号)
	username(str) {
		return new RegExp(/^[a-zA-Z0-9_-]{4,16}$/).test(str)
	},
	// 密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
	passwprd(str) {
		return new RegExp(/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/).test(str)
	},
	// 正整数
	posInt(str) {
		return new RegExp(/^\d+$/).test(str)
	},
	// 负整数
	negInt(str) {
		return new RegExp(/^-\d+$/).test(str)
	},
	// 整数
	int(str) {
		return new RegExp(/^-?\d+$/).test(str)
	},
	// 正数
	posNum(str) {
		return new RegExp(/^\d*\.?\d+$/).test(str)
	},
	// 负数
	negNum(str) {
		return new RegExp(/^-\d*\.?\d+$/).test(str)
	},
	// 数字
	number(str) {
		return new RegExp(/^-?\d*\.?\d+$/).test(str)
	},
	// 邮箱
	email(str) {
		return new RegExp(/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/).test(str)
	},
	// 身份证号
	idNum(str) {
		return new RegExp(
			/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/).test(
			str)
	},
	// 日期 yyyy-mm-dd
	date(str) {
		return new RegExp(
			/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/
		).test(str)
	},
	// Q号,5-11位
	qqNum(str) {
		return new RegExp(/^[1-9][0-9]{4,10}$/).test(str)
	},
	// 微信号
	qqNum(str) {
		return new RegExp(/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/).test(str)
	},
	// 车牌号
	licensePlate(str) {
		return new RegExp(/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/).test(str)
	},
	// 汉字
	onlyChinese(str) {
		return new RegExp(/^[\u4e00-\u9fa5]{0,}$/).test(str)
	},
	// 纳税识别号
	taxId(str) {
		return new RegExp(/^[A-Z0-9]{15}$|^[A-Z0-9]{18}$|^[A-Z0-9]{20}$/).test(str)
		// return new RegExp(/[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}/).test(str)
	},
	// 银行账号
	bankAccount(str) {
		return new RegExp(/^([1-9]{1})([0-9]{13,19})$/).test(str)
	},


}

;