日常用到的,会陆续更新


<script type="text/javascript"> 

var U = U || {};
U.validate = {
	//去前后空格
	trim: function(str) {
		return str.replace(/(^\s*)|(\s*$)/g, "")
	},
	//去掉中括号([a,b,c]==a,b,c)
	delzkh: function(str) {
		return str.replace(/\[(.+?)\]/g, "$1")
	},
	//截取左边count个字符
	left: function(str,count) {
		return str.substr(0, count)
	},
	//截取右边count个字符
	right: function(str,count) {
		return str.substr(str.length - count)
	},
	//计算中文字符串的长度,两个英文符号算一个长度。
	zhLength: function(str) {
		return Math.ceil(str.replace(/[\u4e00-\u9fa5]/g, '**').length / 2)
	},
	//d验证字符串是否为合法的手机号码
	checkMoblie: function(str) {
		return /^1[3|4|5|8][0-9]\d{8}$/.test(str) ? true : false
	},
	//d验证字符串是否为合法的身份证号码
	checkIdCardNo: function(str) {
		return /^[1-9]\d{13}[0-9,x,X]$|^[1-9]\d{16}[0-9,x,X]$/.test(str) ? true : false
	},
	//d验证字符串是否为合法的邮政编码
	checkZipCode: function(str) {
		return /^[0-9]{6}$/.test(str) ? true : false
	},
	//d验证字符串是否为合法的电子邮箱地址
	checkEmail: function(str) {
		return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(str) ? true : false
	},
	//验证日期是否为YYYY-MM-DD格式
	isDate: function(str) {
		return /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/.test(str) ? true : false
	},
	//验证日期是否为YYYY-MM-DD hh:mm:ss格式
	isDateTime: function(str) {
		return /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})(\d{1,2}):(\d{1,2}):(\d{1,2})$/.test(str) ? true : false
	},
	//hh:mm:ss格式
	isTime: function(str) {
		return /^((20|21|22|23|[0-1]\d)\:[0-5][0-9])(\:[0-5][0-9])?$/.test(str) ? true : false
	},
	//验证移动电话
	isMobile: function(str) {
		return /^1(3|4|5|7|8)\d{9}$/.test(str) ? true : false
	},
	//验证固定电话
	isPhone: function(str) {
		return /^(\d{3,4}[-|——|_|\s]+)?\d{7,8}([-|——|_|\s]+\d{2,6})?$/.test(str) ? true : false
	},
	//验证邮编
	isZip: function(str) {
		return /^[1-9]\d{5}(?!\d)$/.test(str) ? true : false
	},
	//验证QQ号码
	isQQ: function(str) {
		return /^[1-9][0-9]{4,9}$/.test(str) ? true : false
	},
	//验证IP地址
	isIp: function(str) {
		return /^((?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))$/.test(str) ? true : false
	},
	//验证邮箱
	isEmail: function(str) {
		return /^([a-zA-Z0-9]+[-|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[-|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/.test(str) ? true : false
	},
	//验证身份证
	isIdCard: function(str) {
		return /^\d{6}((\d{2}((0[1-9])|(1[0-2]))[0-3]\d{4})|((19|20)\d{2}((0[1-9])|(1[0-2]))[0-3]\d{4}[0-9xX]?))$/.test(str) ? true : false
	},
	//验证是否为字母
	isEn: function(str) {
		return /^[a-zA-Z]+$/.test(str) ? true : false
	},
	//验证是否为汉字
	isCn: function(str) {
		return /^[\u4e00-\u9fa5]+$/.test(str) ? true : false
	},
	//验证是否为数字
	isNumber: function(str) {
		return /^[-]?\d+((\.\d+)|(\d*))$/.test(str) ? true : false
	},
	//验证是否为整数
	isInt: function(str) {
		return /^[-]?\d+$/.test(str) ? true : false
	},
	//验证是否为双精度数字(小数点两位)
	isFloat: function(str) {
		return /^[-]?\d+\.\d+$/.test(str) ? true : false
	},
	//验证字符是否为:a-z,A-Z,0-9
	isString: function(str) {
		return /^[a-zA-Z0-9_]+$/.test(str) ? true : false
	},
	//验证URL
	isUrl: function(str) {
		return /^(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/\~\+#]*[\w\-\@?^=%&amp;\/\~\+#])?/i.test(str) ? true : false;
	},
	//验证微信号
	isWeixin: function(str) {
		return /^[a-zA-Z][0-9a-zA-Z\-_]{5,19}$/.test(str) ? true : false
	},
	//验证密码是否为7~20个数字+字母组合(允许 - 和 _)
	isPassword:function(str){
		return /^[0-9a-zA-Z\-_]{7,20}$/.test(str) ? true : false;
	},
        //验证是否以.mp3结尾,其他类型通用
        isMp3:function(str){
               return /^.*\.mp3$/.test(str) ? true : false;
        },
	//检测非法字符
	strS:function(str){
	    var reg = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()&mdash;—|{}【】‘;:”“'。,、?\+\_\%\-\*\÷]");
	    var rs = "";
	    for (var len=str.length; len > -1; len--) {
	        rs = rs + str.substr(len, 1).replace(reg,'');
	    }
	    rs = rs.replace(/\s+/g,"");
	    if(rs=='' || we.validate.isNumber(rs)){
	    	return true;
	    }else{
	    	return false;
	    }
	},
	//验证是否有重复
	repeat:function(str){
		return /^([0-9a-zA-Z])\1+$/.test(str) ? true : false;
	},
	//验证内容和字数是否合法
	checkContent:function(str,min,maxface,maxrepeat){
	var faceLen = 0;
        if(str.match(/\[[^\]]+\]/ig)){
            faceLen = str.match(/\[[^\]]+\]/ig).length
        }
        //console.log(faceLen)
        //剔除表情,剔除乱七八糟的符号和对应的符号编码
        str = str.replace(/\[[^\]]+\]/ig,"").replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?]/g,"").replace(/[\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5]/g,"");
        //对内容里的标点符号空格回车换行等先escape编码再统统剔除
        str = unescape(escape(str).replace(/(%|%5c)uE[0-5][0-5][0-9A-F]/ig, ""));
        min = min || 1;

        //备用
        // console.log(str.replace(/(.)(\1)+/g,function($1,$2,$3){
        //     //清除相邻重复字符串
        //     return $2;
        // }));
        // console.log(str.replace(/(.).*(\1)/g,function($1,$2,$3){
        //     //只保留重复字符串的第一次出现的串
        //     // 第一个参数匹配整个匹配值,从第二个开始是匹配的子串
        //     $1 = $2+$1.substring(1).replace(new RegExp($2,'g'),'');
        //     return $1;
        // }));

        //去重
        var charObj= {},res = '';
        for(var i=0,sub;sub=str.charAt(i);i++){
            if(charObj[sub]){
                //charObj[sub] = ++charObj[sub];
                continue;
            }
            charObj[sub] = 1;
            res += sub;
        }
        console.info(res);

        var  strLen = str.length;
        if(strLen < min) return {code:-1,msg:"最少需要输入"+min+"个子(不包含表情)"};//最小字数
        if(faceLen > 0 && parseInt(faceLen/(faceLen+strLen)*100)>maxface) return {code:-1,msg:"表情不能超过总文字的"+maxface+"%"};//表情最大占比
        if(parseInt(res.length/strLen*100)<maxrepeat) return {code:-1,msg:"重复字符大于"+maxrepeat+"%"};//除去表情文字重复率不能大于50%
        return {code:0,msg:"输入正确"};
	},
	mobilecheck : function() {
		//检测是否手机端
		var check = false;
		(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check = true})(navigator.userAgent||navigator.vendor||window.opera);
		return check; 
	}
};

//检测是否为某一手机
U.isMobile = {
	Android: function() {
		return navigator.userAgent.match(/Android/i) ? true : false
	},
	BlackBerry: function() {
		return navigator.userAgent.match(/BlackBerry/i) ? true : false
	},
	iOS: function() {
		return navigator.userAgent.match(/iPhone|iPad|iPod/i) ? true : false
	},
	Windows: function() {
		return navigator.userAgent.match(/IEMobile/i) ? true : false
	},
	any: function() {
		return (U.isMobile.Android() || U.isMobile.BlackBerry() || U.isMobile.iOS() || U.isMobile.Windows())
	}
};
// 获取浏览器版本
U.browserVersion = function(){
    var userAgent = navigator.userAgent, //取得浏览器的userAgent字符串  
		isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1, //判断是否IE<11浏览器  
		isEdge = userAgent.indexOf("Edge") > -1 && !isIE, //判断是否IE的Edge浏览器  
		isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1,//判断是否IE11浏览器 
		isChrome = userAgent.indexOf("Chrome") > 0,
		isFirefox = userAgent.indexOf("Firefox") > 0,
		isSafari = userAgent.indexOf("Safari") > 0,
		isMozilla = userAgent.indexOf("Gecko") > 0;
    if(isIE) {
        var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
        reIE.test(userAgent);
        var fIEVersion = parseFloat(RegExp["$1"]);
        if(fIEVersion == 7) {
            return 7;
        } else if(fIEVersion == 8) {
            return 8;
        } else if(fIEVersion == 9) {
            return 9;
        } else if(fIEVersion == 10) {
            return 10;
        } else {
            return 6;//IE版本<=7
        }
    }
    if(isChrome)return 16;//webkit内核(谷歌,360,QQ,搜狗等国产浏览器内核支持)
	if(isSafari)return 16;//webkit内核 (苹果浏览器)
	if(isFirefox)return 15;//火狐浏览器
	if(isEdge)return 14;//微软最新Edge
	if(isMozilla)return 12;//老版本的火狐
	if(isIE11)return 11;//IE11
}

//移除项
Array.prototype.remove = function(val) {
	var index = val;
	if (index > -1) {
		this.splice(index, 1)
	}
};
//替换数组
Array.prototype.add = function(index, len, newarr) {
	if (index > -1) {
		this.splice(index, len, newarr)
	}
};
//往前移动
Array.prototype.preitem = function(val) {
	var index = val;
	if (index <= 0) {
		return
	}
	this[index] = this.splice(index - 1, 1, this[index])[0]
};
//往后移动
Array.prototype.nextitem = function(val) {
	var index = val;
	if (index >= this.length - 1) {
		return
	}
	this[index] = this.splice(index + 1, 1, this[index])[0]
};
//获取最大ID
Array.prototype.max = function() {
	var max = this[0].id;
	for (var i = 0; i < this.length; i++) {
		if (max < this[i].id) {
			max = this[i].id
		}
	}
	return max + 1
};
//获取当前索引
Array.prototype.index = function(id) {
	var index = null;
	var isid = id > 0 ? true : false;
	if (isid) {
		for (var i = 0; i < this.length; i++) {
			if (this[i].id == id) {
				index = i
			}
		}
	}
	return index
};

//获取对象长度方法
function objlength(ele) {
	var length = Object.keys(ele).length;
	return length
}

//十六进制颜色值的正则表达式
U.colorReg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
/*RGBA颜色转换为16进制*/
String.prototype.colorHex = function(){
	var that = this;
	if(/^(rgba|RGBA|rgb|RGB)/.test(that)){
		var aColor = that.replace(/(?:\(|\)|rgba|RGBA|rgb|RGB)*/g,"").split(",");
		if(aColor.length>3){
			aColor.pop();
		}
		var strHex = "#";
		for(var i=0; i<aColor.length; i++){
			var hex = Number(aColor[i]).toString(16);
			if (hex.length < 2) {
                hex = '0' + hex;    
            }
			strHex += hex;
		}
		if(strHex.length !== 7){
			strHex = that;	
		}
		return strHex;
	}else if(U.colorReg.test(that)){
		var aNum = that.replace(/#/,"").split("");
		if(aNum.length === 6){
			return that;	
		}else if(aNum.length === 3){
			var numHex = "#";
			for(var i=0; i<aNum.length; i+=1){
				numHex += (aNum[i]+aNum[i]);
			}
			return numHex;
		}
	}else{
		return that;	
	}
};

/*16进制颜色转为RGB格式*/
String.prototype.colorRgb = function(){
	var sColor = this.toLowerCase();
	if(sColor && U.colorReg.test(sColor)){
		if(sColor.length === 4){
			var sColorNew = "#";
			for(var i=1; i<4; i+=1){
				sColorNew += sColor.slice(i,i+1).concat(sColor.slice(i,i+1));	
			}
			sColor = sColorNew;
		}
		//处理六位的颜色值
		var sColorChange = [];
		for(var i=1; i<7; i+=2){
			sColorChange.push(parseInt("0x"+sColor.slice(i,i+2)));	
		}
		return "RGB(" + sColorChange.join(",") + ")";
	}else{
		return sColor;	
	}
};

/**
 *对Date的扩展,将 Date 转化为指定格式的String
 *月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
 *年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
 *例子:
 *(new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
 *(new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
 */
Date.prototype.format = function (fmt) {
    var o = {
        "M+": this.getMonth() + 1, //月份
        "d+": this.getDate(), //日
        "h+": this.getHours(), //小时
        "m+": this.getMinutes(), //分
        "s+": this.getSeconds(), //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

//检测系统、设备、型号、屏幕retina等参数//如手机端访问将会在根节点上返回calss="Mobeli-any pixel-ratio-3 retina ios ios-9 ios-9-1 ios-gt-8 ios-gt-7 ios-gt-6"
;(function ($,U) {
	"use strict";
	var device = {};
	var ua = navigator.userAgent;

	var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
	var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
	var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
	var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/);

	device.ios = device.android = device.iphone = device.ipad = device.androidChrome = false;
	
	// Android
	if (android) {
		device.os = 'android';
		device.osVersion = android[2];
		device.android = true;
		device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
	}
	if (ipad || iphone || ipod) {
		device.os = 'ios';
		device.ios = true;
	}
	// iOS
	if (iphone && !ipod) {
		device.osVersion = iphone[2].replace(/_/g, '.');
		device.iphone = true;
	}
	if (ipad) {
		device.osVersion = ipad[2].replace(/_/g, '.');
		device.ipad = true;
	}
	if (ipod) {
		device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
		device.iphone = true;
	}
	// iOS 8+ changed UA
	if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
		if (device.osVersion.split('.')[0] === '10') {
			device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
		}
	}

	// Webview
	device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);
		
	// Minimal UI
	if (device.os && device.os === 'ios') {
		var osVersionArr = device.osVersion.split('.');
		device.minimalUi = !device.webView &&
							(ipod || iphone) &&
							(osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) &&
							$('meta[name="viewport"]').length > 0 && $('meta[name="viewport"]').attr('content').indexOf('minimal-ui') >= 0;
	}

	// Check for status bar and fullscreen app mode
	var windowWidth = $(window).width();
	var windowHeight = $(window).height();
	device.statusBar = false;
	if (device.webView && (windowWidth * windowHeight === screen.width * screen.height)) {
		device.statusBar = true;
	}
	else {
		device.statusBar = false;
	}

	// Classes
	var classNames = [];

	// Pixel Ratio
	device.pixelRatio = window.devicePixelRatio || 1;
	classNames.push('pixel-ratio-' + Math.floor(device.pixelRatio));
	if (device.pixelRatio >= 2) {
		classNames.push('retina');
	}

	// OS classes
	if (device.os) {
		classNames.push(device.os, device.os + '-' + device.osVersion.split('.')[0], device.os + '-' + device.osVersion.replace(/\./g, '-'));
		if (device.os === 'ios') {
			var major = parseInt(device.osVersion.split('.')[0], 10);
			for (var i = major - 1; i >= 6; i--) {
				classNames.push('ios-gt-' + i);
			}
		}
		
	}
	// Status bar classes
	if (device.statusBar) {
		classNames.push('with-statusbar-overlay');
	}
	else {
		$('html').removeClass('with-statusbar-overlay');
	}

	// Add html classes
	if (classNames.length > 0) $('html').addClass(classNames.join(' '));
	var htmlDom = $("html");
	if (U.isMobile.any()) {
		htmlDom.addClass('Mobeli-any');
	}else{
		var browserVersion = U.browserVersion();
		switch(browserVersion){
			case 6 : 
				htmlDom.addClass('ie-6');
				break;
			case 7 : 
			htmlDom.addClass('ie-7');
			break;
			case 8 : 
				htmlDom.addClass('ie-8');
				break;
			case 9 : 
				htmlDom.addClass('ie-9');
				break;
			case 10 : 
				htmlDom.addClass('ie-10');
				break;
			case 11 : 
				htmlDom.addClass('ie-11');
				break;
			case 12 : 
				htmlDom.addClass('ie-11-old');
				break;
			case 14 : 
				htmlDom.addClass('ie-edg');
				break;
			case 15 : 
				htmlDom.addClass('firefox');
				break;
			case 16 : 
				htmlDom.addClass('webkit');
				break;
			default: 
				htmlDom.addClass('pc-other');
		}
	}
	$.device = device;
})($,U);

</script>

评论  表情