lyjutils.js javascript 工具类
收集整理的常用js,部分方法依赖jquery
/**
* 常用js工具类
* [lyj 收集整理]
* @type {Object}
*/
var lyj = (function(window, document, $) {
var count = 1000;
var browser = (function(){
var versions = function() {
var u = navigator.userAgent, app = navigator.appVersion;
//移动终端浏览器版本信息
return {
//IE内核
trident: u.indexOf('Trident') > -1,
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器
iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
html5plus:u.indexOf('Html5Plus') > -1
};
}
var language = (navigator.browserLanguage || navigator.language).toLowerCase();
return {
versions : versions,
language : language
};
})();
var tools = {
// test
test : function(){
alert("测试必须有");
console.log(browser);
},
/**
* @title ajax封装
* @author lyj [author] [2018-06-13]
* @param {[type]} url [description]
* @param {[type]} data [description]
* @param {[type]} success [description]
* @param {[type]} cache [description]
* @param {[type]} alone [description]
* @param {[type]} async [description]
* @param {[type]} type [description]
* @param {[type]} dataType [description]
* @param {[type]} error [description]
* @return {[type]} [description]
*/
ajaxReturn : function(url, data, success, cache, alone, async, type, dataType, error) {
//请求类型
var type = type || 'post';
//接收数据类型
var dataType = dataType || 'json';
//异步请求
var async = async || true;
//独立提交(一次有效的提交)
var alone = alone || false;
//浏览器历史缓存
var cache = cache || false;
// 成功
var success = success ||
function(data) {
setTimeout(function() {
lyjalert(data.info);
},
500);
if (data.status) {
setTimeout(function() {
if (data.url) {
location.replace(data.url);
} else {
location.reload(true);
}
},
1500);
}
};
// 失败
var error = error ||
function(data) {
setTimeout(function() {
if (data.status == 404) {
lyjalert('请求失败,请求未找到');
} else if (data.status == 503) {
lyjalert('请求失败,服务器内部错误');
} else {
lyjalert('请求失败,网络连接超时');
}
},
500);
};
$.ajax({
'url': url,
'data': data,
'type': type,
'dataType': dataType,
'async': async,
'success': success,
'error': error,
'jsonpCallback': 'jsonp' + (new Date()).valueOf().toString().substr( - 4),
'beforeSend': function() {
// lyjalert('loading');
},
});
},
/**
* @title 检测 页面类型
* @author lyj [author] [2018-05-21]
* @return {[type]} [description]
*/
checktype : function(){
var res = "";
var arr = [];
//判断是否是移动设备打开
if (browser.versions.mobile) {
res += "||移动设备打开";
arr['mobile'] = 1;
//获取判断用的对象
var ua = navigator.userAgent.toLowerCase();
//在微信中打开
if (ua.match(/MicroMessenger/i) == "micromessenger") {
// alert("weixin");
res += "||weixin";
arr['weixin'] = 1;
}
//在新浪微博客户端打开
if (ua.match(/WeiBo/i) == "weibo") {
// alert("weibo");
res += "||weibo";
arr['weibo'] = 1;
}
if (ua.match(/QQ/i) == "qq") {
// alert("QQ");
res += "||QQ";
arr['QQ'] = 1;
}
if(/alipay/ig.test(ua)){
// alert("支付宝");
res += "||支付宝";
arr['支付宝'] = 1;
}
//是否在IOS浏览器打开
if (browser.versions.ios) {
// app 打开
if(browser.versions.html5plus){
res += "||苹果app打开";
arr['iosapp'] = 1;
} else {
res += "||苹果浏览器打开";
arr['iosbrowser'] = 1;
}
}
//是否在安卓浏览器打开
if(browser.versions.android){
// app 打开
if(browser.versions.html5plus){
res += "||安卓app打开";
arr['androidapp'] = 1;
} else {
res += "||安卓浏览器打开";
arr['androidbrowser'] = 1;
}
}
} else {
res += "||PC浏览器打开";
arr['pc'] = 1;
}
// 安卓浏览器打开
// if(arr['mobile']&&arr['androidbrowser']){
// alert('安卓浏览器打开');
// }
console.info(arr);
return arr;
},
// 获取 input name[] 数组的值
my_array_name : function(namestr) {
var valArr = new Array;
$("input[name='" + namestr + "[]']").each(function(i) {
valArr[i] = $(this).val();
});
// var priv = valArr.join(',');
return valArr;
},
// 模板赋值
assignModel : function(tpl, model){
return tpl.replace(/\{([\w,-]+)\}/ig, function(matched, key){
return model[key];
});
},
/**
* @title 循环赋值
* @author lyj [author] [2018-06-11]
* @param {[type]} id [模板id 或 class]
* @param {[type]} data [数组数据]
* @param {[type]} outid [追加数据的div]
* @return {[type]} [description]
*/
assignTbody : function(id, data, outid){
// 追加还是替换
var type = arguments[3] ? arguments[3] : 0;
// 获取模板数据
var tpl = $(id).html();
// 新模板数据
var newTpl = '';
// 遍历数据,替换到新模板
for (x in data){
newTpl += this.assignModel(tpl, data[x]);
}
// 替换
if(type == 0){
// 替换数据
$(outid).html(newTpl);
} else {
// 追加数据
$(outid).append(newTpl);
}
},
/**
* @title 循环替换数据到 模板
* @author lyj [author] [2018-06-25]
* @param {[type]} id [description]
* @param {[type]} data [description]
* @return {[type]} [description]
*/
assignDatas: function(id, data){
// 获取模板数据
var tpl = $(id).html();
// 新模板数据
var newTpl = '';
// 遍历数据,替换到新模板
for (x in data){
newTpl += lyj.assignModel(tpl, data[x]);
}
return newTpl;
},
/**
* @title 找到第一个祖先元素
* @author lyj [author] [2018-05-21]
* @param {[type]} objM [description]
* @param {[type]} objP [description]
* @return {[type]} [description]
*/
findFirstElement : function(objM,objP){
return $(objM).closest(objP);
},
/**
* @title 删除 第一个祖先元素
* @author lyj [author] [2018-05-21]
* @param {[type]} objM [自己]
* @param {[type]} objP [祖先]
* @return {[type]} [description]
*/
removeFirstElement : function(objM,objP){
return $(objM).closest(objP).remove();
},
copyToClipboard : function(str){
var textToClipboard = str;
var success = true;
if (window.clipboardData) { // Internet Explorer
window.clipboardData.setData("Text", textToClipboard);
} else {
// create a temporary element for the execCommand method
var forExecElement = this.createElementForExecCommand(textToClipboard);
/* Select the contents of the element
(the execCommand for 'copy' method works on the selection) */
this.selectContent(forExecElement);
var supported = true;
// UniversalXPConnect privilege is required for clipboard access in Firefox
try {
if (window.netscape && netscape.security) {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
}
// Copy the selected content to the clipboard
// Works in Firefox and in Safari before version 5
success = document.execCommand("copy", false, null);
} catch(e) {
success = false;
}
// remove the temporary element
document.body.removeChild(forExecElement);
}
if (success) {
alert("The text is on the clipboard, try to paste it!");
} else {
alert("Your browser doesn't allow clipboard access!");
}
},
createElementForExecCommand : function(textToClipboard){
var forExecElement = document.createElement("div");
// place outside the visible area
forExecElement.style.position = "absolute";
forExecElement.style.left = "-10000px";
forExecElement.style.top = "-10000px";
// write the necessary text into the element and append to the document
forExecElement.textContent = textToClipboard;
document.body.appendChild(forExecElement);
// the contentEditable mode is necessary for the execCommand method in Firefox
forExecElement.contentEditable = true;
return forExecElement;
},
selectContent : function(element){
// first create a range
var rangeToSelect = document.createRange();
rangeToSelect.selectNodeContents(element);
// select the contents
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(rangeToSelect);
},
/**
* @title 格式化json字符串 基于c.js
* @author lyj [author] [2018-05-21]
* @param {[type]} jsonstr [description]
* @return {[type]} [description]
*/
formatjson : function(jsonstr){
window.TAB = MultiplyString(2, window.SINGLE_TAB);
var html = "";
try {
if (jsonstr == "") jsonstr = "\"\"";
var obj = eval("[" + jsonstr + "]");
html = ProcessObject(obj[0], 0, false, false, false);
return "<PRE class='CodeContainer'>" + html + "</PRE>";
} catch(e) {
alert("JSON数据格式不正确:\n" + e.message);
}
},
/******************************日期时间[datetime]类js***********************************/
datetimeUtils : {
patterns: {
PATTERN_ERA: 'G', //Era 标志符 Era strings. For example: "AD" and "BC"
PATTERN_YEAR: 'y', //年
PATTERN_MONTH: 'M', //月份
PATTERN_DAY_OF_MONTH: 'd', //月份的天数
PATTERN_HOUR_OF_DAY1: 'k', //一天中的小时数(1-24)
PATTERN_HOUR_OF_DAY0: 'H', //24小时制,一天中的小时数(0-23)
PATTERN_MINUTE: 'm', //小时中的分钟数
PATTERN_SECOND: 's', //秒
PATTERN_MILLISECOND: 'S', //毫秒
PATTERN_DAY_OF_WEEK: 'E', //一周中对应的星期,如星期一,周一
PATTERN_DAY_OF_YEAR: 'D', //一年中的第几天
PATTERN_DAY_OF_WEEK_IN_MONTH: 'F', //一月中的第几个星期(会把这个月总共过的天数除以7,不够准确,推荐用W)
PATTERN_WEEK_OF_YEAR: 'w', //一年中的第几个星期
PATTERN_WEEK_OF_MONTH: 'W', //一月中的第几星期(会根据实际情况来算)
PATTERN_AM_PM: 'a', //上下午标识
PATTERN_HOUR1: 'h', //12小时制 ,am/pm 中的小时数(1-12)
PATTERN_HOUR0: 'K', //和h类型
PATTERN_ZONE_NAME: 'z', //时区名
PATTERN_ZONE_VALUE: 'Z', //时区值
PATTERN_WEEK_YEAR: 'Y', //和y类型
PATTERN_ISO_DAY_OF_WEEK: 'u',
PATTERN_ISO_ZONE: 'X'
},
week: {
'ch': {
"0": "\u65e5",
"1": "\u4e00",
"2": "\u4e8c",
"3": "\u4e09",
"4": "\u56db",
"5": "\u4e94",
"6": "\u516d"
},
'en': {
"0": "Sunday",
"1": "Monday",
"2": "Tuesday",
"3": "Wednesday",
"4": "Thursday",
"5": "Friday",
"6": "Saturday"
}
},
//获取当前时间
getCurrentTime: function() {
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth() + 1;
var day = today.getDate();
var hours = today.getHours();
var minutes = today.getMinutes();
var seconds = today.getSeconds();
var timeString = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
return timeString;
},
/*
* 比较时间大小
* time1>time2 return 1
* time1<time2 return -1
* time1==time2 return 0
*/
compareTime: function(time1, time2) {
if(Date.parse(time1.replace(/-/g, "/")) > Date.parse(time2.replace(/-/g, "/"))) {
return 1;
} else if(Date.parse(time1.replace(/-/g, "/")) < Date.parse(time2.replace(/-/g, "/"))) {
return -1;
} else if(Date.parse(time1.replace(/-/g, "/")) == Date.parse(time2.replace(/-/g, "/"))) {
return 0;
}
},
//是否闰年
isLeapYear: function(year) {
return((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);
},
//获取某个月的天数,从0开始
getDaysOfMonth: function(year, month) {
return [31, (this.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
},
getDaysOfMonth2: function(year, month) {
// 将天置为0,会获取其上个月的最后一天
month = parseInt(month) + 1;
var date = new Date(year, month, 0);
return date.getDate();
},
/*距离现在几天的日期:负数表示今天之前的日期,0表示今天,整数表示未来的日期
* 如-1表示昨天的日期,0表示今天,2表示后天
*/
fromToday: function(days) {
var today = new Date();
today.setDate(today.getDate() + days);
var date = today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate();
return date;
},
/**
* 日期时间格式化
* @param {Object} dateTime 需要格式化的日期时间
* @param {String} pattern 格式化的模式,如yyyy-MM-dd hh(HH):mm:ss.S a k K E D F w W z Z
*/
formt: function(dateTime, pattern) {
var date = new Date(dateTime);
if(Bee.StringUtils.isBlank(pattern)) {
return date.toLocaleString();
}
return pattern.replace(/([a-z])\1*/ig, function(matchStr, group1) {
var replacement = "";
switch(group1) {
case Bee.DateUtils.patterns.PATTERN_ERA: //G
break;
case Bee.DateUtils.patterns.PATTERN_WEEK_YEAR: //Y
case Bee.DateUtils.patterns.PATTERN_YEAR: //y
replacement = date.getFullYear();
break;
case Bee.DateUtils.patterns.PATTERN_MONTH: //M
var month = date.getMonth() + 1;
replacement = (month < 10 && matchStr.length >= 2) ? "0" + month : month;
break;
case Bee.DateUtils.patterns.PATTERN_DAY_OF_MONTH: //d
var days = date.getDate();
replacement = (days < 10 && matchStr.length >= 2) ? "0" + days : days;
break;
case Bee.DateUtils.patterns.PATTERN_HOUR_OF_DAY1: //k(1~24)
var hours24 = date.getHours();
replacement = hours24;
break;
case Bee.DateUtils.patterns.PATTERN_HOUR_OF_DAY0: //H(0~23)
var hours24 = date.getHours();
replacement = (hours24 < 10 && matchStr.length >= 2) ? "0" + hours24 : hours24;
break;
case Bee.DateUtils.patterns.PATTERN_MINUTE: //m
var minutes = date.getMinutes();
replacement = (minutes < 10 && matchStr.length >= 2) ? "0" + minutes : minutes;
break;
case Bee.DateUtils.patterns.PATTERN_SECOND: //s
var seconds = date.getSeconds();
replacement = (seconds < 10 && matchStr.length >= 2) ? "0" + seconds : seconds;
break;
case Bee.DateUtils.patterns.PATTERN_MILLISECOND: //S
var milliSeconds = date.getMilliseconds();
replacement = milliSeconds;
break;
case Bee.DateUtils.patterns.PATTERN_DAY_OF_WEEK: //E
var day = date.getDay();
replacement = Bee.DateUtils.week['ch'][day];
break;
case Bee.DateUtils.patterns.PATTERN_DAY_OF_YEAR: //D
replacement = Bee.DateUtils.dayOfTheYear(date);
break;
case Bee.DateUtils.patterns.PATTERN_DAY_OF_WEEK_IN_MONTH: //F
var days = date.getDate();
replacement = Math.floor(days / 7);
break;
case Bee.DateUtils.patterns.PATTERN_WEEK_OF_YEAR: //w
var days = Bee.DateUtils.dayOfTheYear(date);
replacement = Math.ceil(days / 7);
break;
case Bee.DateUtils.patterns.PATTERN_WEEK_OF_MONTH: //W
var days = date.getDate();
replacement = Math.ceil(days / 7);
break;
case Bee.DateUtils.patterns.PATTERN_AM_PM: //a
var hours24 = date.getHours();
replacement = hours24 < 12 ? "\u4e0a\u5348" : "\u4e0b\u5348";
break;
case Bee.DateUtils.patterns.PATTERN_HOUR1: //h(1~12)
var hours12 = date.getHours() % 12 || 12; //0转为12
replacement = (hours12 < 10 && matchStr.length >= 2) ? "0" + hours12 : hours12;
break;
case Bee.DateUtils.patterns.PATTERN_HOUR0: //K(0~11)
var hours12 = date.getHours() % 12;
replacement = hours12;
break;
case Bee.DateUtils.patterns.PATTERN_ZONE_NAME: //z
replacement = Bee.DateUtils.getZoneNameValue(date)['name'];
break;
case Bee.DateUtils.patterns.PATTERN_ZONE_VALUE: //Z
replacement = Bee.DateUtils.getZoneNameValue(date)['value'];
break;
case Bee.DateUtils.patterns.PATTERN_ISO_DAY_OF_WEEK: //u
break;
case Bee.DateUtils.patterns.PATTERN_ISO_ZONE: //X
break;
default:
break;
}
return replacement;
});
},
/**
* 计算一个日期是当年的第几天
* @param {Object} date
*/
dayOfTheYear: function(date) {
var obj = new Date(date);
var year = obj.getFullYear();
var month = obj.getMonth(); //从0开始
var days = obj.getDate();
var daysArr = [31, (this.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
for(var i = 0; i < month; i++) {
days += daysArr[i];
}
return days;
},
//获得时区名和值
getZoneNameValue: function(dateObj) {
var date = new Date(dateObj);
date = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
var arr = date.toString().match(/([A-Z]+)([-+]\d+:?\d+)/);
var obj = {
'name': arr[1],
'value': arr[2]
};
return obj;
}
},
/******************************日期时间[datetime]类js***********************************/
/******************************数字[number]类js***********************************/
numberUtils : {
change_to_Chinese: function(Num) {
//判断如果传递进来的不是字符的话转换为字符
if (typeof Num == "number") {
Num = new String(Num);
};
Num = Num.replace(/,/g, "") //替换tomoney()中的“,”
Num = Num.replace(/ /g, "") //替换tomoney()中的空格
Num = Num.replace(/¥/g, "") //替换掉可能出现的¥字符
if (isNaN(Num)) { //验证输入的字符是否为数字
//alert("请检查小写金额是否正确");
return "";
};
//字符处理完毕后开始转换,采用前后两部分分别转换
var part = String(Num).split(".");
var newchar = "";
//小数点前进行转化
for (i = part[0].length - 1; i >= 0; i--) {
if (part[0].length > 10) {
return "";
//若数量超过拾亿单位,提示
}
var tmpnewchar = ""
var perchar = part[0].charAt(i);
switch (perchar) {
case "0":
tmpnewchar = "零" + tmpnewchar;
break;
case "1":
tmpnewchar = "壹" + tmpnewchar;
break;
case "2":
tmpnewchar = "贰" + tmpnewchar;
break;
case "3":
tmpnewchar = "叁" + tmpnewchar;
break;
case "4":
tmpnewchar = "肆" + tmpnewchar;
break;
case "5":
tmpnewchar = "伍" + tmpnewchar;
break;
case "6":
tmpnewchar = "陆" + tmpnewchar;
break;
case "7":
tmpnewchar = "柒" + tmpnewchar;
break;
case "8":
tmpnewchar = "捌" + tmpnewchar;
break;
case "9":
tmpnewchar = "玖" + tmpnewchar;
break;
}
switch (part[0].length - i - 1) {
case 0:
tmpnewchar = tmpnewchar + "元";
break;
case 1:
if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
break;
case 2:
if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
break;
case 3:
if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
break;
case 4:
tmpnewchar = tmpnewchar + "万";
break;
case 5:
if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
break;
case 6:
if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
break;
case 7:
if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
break;
case 8:
tmpnewchar = tmpnewchar + "亿";
break;
case 9:
tmpnewchar = tmpnewchar + "拾";
break;
}
var newchar = tmpnewchar + newchar;
}
//小数点之后进行转化
if (Num.indexOf(".") != -1) {
if (part[1].length > 2) {
// alert("小数点之后只能保留两位,系统将自动截断");
part[1] = part[1].substr(0, 2)
}
for (i = 0; i < part[1].length; i++) {
tmpnewchar = "";
perchar = part[1].charAt(i);
switch (perchar) {
case "0":
tmpnewchar = "零" + tmpnewchar;
break;
case "1":
tmpnewchar = "壹" + tmpnewchar;
break;
case "2":
tmpnewchar = "贰" + tmpnewchar;
break;
case "3":
tmpnewchar = "叁" + tmpnewchar;
break;
case "4":
tmpnewchar = "肆" + tmpnewchar;
break;
case "5":
tmpnewchar = "伍" + tmpnewchar;
break;
case "6":
tmpnewchar = "陆" + tmpnewchar;
break;
case "7":
tmpnewchar = "柒" + tmpnewchar;
break;
case "8":
tmpnewchar = "捌" + tmpnewchar;
break;
case "9":
tmpnewchar = "玖" + tmpnewchar;
break;
}
if (i == 0) tmpnewchar = tmpnewchar + "角";
if (i == 1) tmpnewchar = tmpnewchar + "分";
newchar = newchar + tmpnewchar;
}
}
//替换所有无用汉字
while (newchar.search("零零") != -1) newchar = newchar.replace("零零", "零");
newchar = newchar.replace("零亿", "亿");
newchar = newchar.replace("亿万", "亿");
newchar = newchar.replace("零万", "万");
newchar = newchar.replace("零元", "元");
newchar = newchar.replace("零角", "");
newchar = newchar.replace("零分", "");
if (newchar.charAt(newchar.length - 1) == "元") {
newchar = newchar + "整"
}
return newchar;
},
},
/******************************数字[number]类js***********************************/
/******************************字符串[string]类js***********************************/
stringUtils : {
/**
* @title 字符串是空
* @author lyj [author] [2018-05-23]
* @param {[type]} input [description]
* @return {Boolean} [description]
*/
isEmpty: function(input) {
return input == null || input == '';
},
isNotEmpty: function(input) {
return !this.isEmpty(input);
},
isBlank: function(input) {
return input == null || /^\s*$/.test(input);
},
isNotBlank: function(input) {
return !this.isBlank(input);
},
trim: function(input) {
return input.replace(/^\s+|\s+$/, '');
},
trimToEmpty: function(input) {
return input == null ? "" : this.trim(input);
},
startsWith: function(input, prefix) {
return input.indexOf(prefix) === 0;
},
endsWith: function(input, suffix) {
return input.lastIndexOf(suffix) === 0;
},
contains: function(input, searchSeq) {
return input.indexOf(searchSeq) >= 0;
},
equals: function(input1, input2) {
return input1 == input2;
},
equalsIgnoreCase: function(input1, input2) {
return input1.toLocaleLowerCase() == input2.toLocaleLowerCase();
},
containsWhitespace: function(input) {
return this.contains(input, ' ');
},
//生成指定个数的字符
repeat: function(ch, repeatTimes) {
var result = "";
for(var i = 0; i < repeatTimes; i++) {
result += ch;
}
return result;
},
deleteWhitespace: function(input) {
return input.replace(/\s+/g, '');
},
rightPad: function(input, size, padStr) {
return input + this.repeat(padStr, size);
},
leftPad: function(input, size, padStr) {
return this.repeat(padStr, size) + input;
},
//首小写字母转大写
capitalize: function(input) {
var strLen = 0;
if(input == null || (strLen = input.length) == 0) {
return input;
}
return input.replace(/^[a-z]/, function(matchStr) {
return matchStr.toLocaleUpperCase();
});
},
//首大写字母转小写
uncapitalize: function(input) {
var strLen = 0;
if(input == null || (strLen = input.length) == 0) {
return input;
}
return input.replace(/^[A-Z]/, function(matchStr) {
return matchStr.toLocaleLowerCase();
});
},
//大写转小写,小写转大写
swapCase: function(input) {
return input.replace(/[a-z]/ig, function(matchStr) {
if(matchStr >= 'A' && matchStr <= 'Z') {
return matchStr.toLocaleLowerCase();
} else if(matchStr >= 'a' && matchStr <= 'z') {
return matchStr.toLocaleUpperCase();
}
});
},
//统计含有的子字符串的个数
countMatches: function(input, sub) {
if(this.isEmpty(input) || this.isEmpty(sub)) {
return 0;
}
var count = 0;
var index = 0;
while((index = input.indexOf(sub, index)) != -1) {
index += sub.length;
count++;
}
return count;
},
//只包含字母
isAlpha: function(input) {
return /^[a-z]+$/i.test(input);
},
//只包含字母、空格
isAlphaSpace: function(input) {
return /^[a-z\s]*$/i.test(input);
},
//只包含字母、数字
isAlphanumeric: function(input) {
return /^[a-z0-9]+$/i.test(input);
},
//只包含字母、数字和空格
isAlphanumericSpace: function(input) {
return /^[a-z0-9\s]*$/i.test(input);
},
//数字
isNumeric: function(input) {
return /^(?:[1-9]\d*|0)(?:\.\d+)?$/.test(input);
},
//小数
isDecimal: function(input) {
return /^[-+]?(?:0|[1-9]\d*)\.\d+$/.test(input);
},
//负小数
isNegativeDecimal: function(input) {
return /^\-?(?:0|[1-9]\d*)\.\d+$/.test(input);
},
//正小数
isPositiveDecimal: function(input) {
return /^\+?(?:0|[1-9]\d*)\.\d+$/.test(input);
},
//整数
isInteger: function(input) {
return /^[-+]?(?:0|[1-9]\d*)$/.test(input);
},
//正整数
isPositiveInteger: function(input) {
return /^\+?(?:0|[1-9]\d*)$/.test(input);
},
//负整数
isNegativeInteger: function(input) {
return /^\-?(?:0|[1-9]\d*)$/.test(input);
},
//只包含数字和空格
isNumericSpace: function(input) {
return /^[\d\s]*$/.test(input);
},
isWhitespace: function(input) {
return /^\s*$/.test(input);
},
isAllLowerCase: function(input) {
return /^[a-z]+$/.test(input);
},
isAllUpperCase: function(input) {
return /^[A-Z]+$/.test(input);
},
defaultString: function(input, defaultStr) {
return input == null ? defaultStr : input;
},
defaultIfBlank: function(input, defaultStr) {
return this.isBlank(input) ? defaultStr : input;
},
defaultIfEmpty: function(input, defaultStr) {
return this.isEmpty(input) ? defaultStr : input;
},
//字符串反转
reverse: function(input) {
if(this.isBlank(input)) {
input;
}
return input.split("").reverse().join("");
},
//删掉特殊字符(英文状态下)
removeSpecialCharacter: function(input) {
return input.replace(/[!-/:-@\[-`{-~]/g, "");
},
//只包含特殊字符、数字和字母(不包括空格,若想包括空格,改为[ -~])
isSpecialCharacterAlphanumeric: function(input) {
return /^[!-~]+$/.test(input);
},
/**
* 校验时排除某些字符串,即不能包含某些字符串
* @param {Object} conditions:里面有多个属性,如下:
*
* @param {String} matcherFlag 匹配标识
* 0:数字;1:字母;2:小写字母;3:大写字母;4:特殊字符,指英文状态下的标点符号及括号等;5:中文;
* 6:数字和字母;7:数字和小写字母;8:数字和大写字母;9:数字、字母和特殊字符;10:数字和中文;
* 11:小写字母和特殊字符;12:大写字母和特殊字符;13:字母和特殊字符;14:小写字母和中文;15:大写字母和中文;
* 16:字母和中文;17:特殊字符、和中文;18:特殊字符、字母和中文;19:特殊字符、小写字母和中文;20:特殊字符、大写字母和中文;
* 100:所有字符;
* @param {Array} excludeStrArr 排除的字符串,数组格式
* @param {String} length 长度,可为空。1,2表示长度1到2之间;10,表示10个以上字符;5表示长度为5
* @param {Boolean} ignoreCase 是否忽略大小写
* conditions={matcherFlag:"0",excludeStrArr:[],length:"",ignoreCase:true}
*/
isPatternMustExcludeSomeStr: function(input, conditions) {
//参数
var matcherFlag = conditions.matcherFlag;
var excludeStrArr = conditions.excludeStrArr;
var length = conditions.length;
var ignoreCase = conditions.ignoreCase;
//拼正则
var size = excludeStrArr.length;
var regex = (size == 0) ? "^" : "^(?!.*(?:{0}))";
var subPattern = "";
for(var i = 0; i < size; i++) {
excludeStrArr[i] = Bee.StringUtils.escapeMetacharacterOfStr(excludeStrArr[i]);
subPattern += excludeStrArr[i];
if(i != size - 1) {
subPattern += "|";
}
}
regex = this.format(regex, [subPattern]);
switch(matcherFlag) {
case '0':
regex += "\\d";
break;
case '1':
regex += "[a-zA-Z]";
break;
case '2':
regex += "[a-z]";
break;
case '3':
regex += "[A-Z]";
break;
case '4':
regex += "[!-/:-@\[-`{-~]";
break;
case '5':
regex += "[\u4E00-\u9FA5]";
break;
case '6':
regex += "[a-zA-Z0-9]";
break;
case '7':
regex += "[a-z0-9]";
break;
case '8':
regex += "[A-Z0-9]";
break;
case '9':
regex += "[!-~]";
break;
case '10':
regex += "[0-9\u4E00-\u9FA5]";
break;
case '11':
regex += "[a-z!-/:-@\[-`{-~]";
break;
case '12':
regex += "[A-Z!-/:-@\[-`{-~]";
break;
case '13':
regex += "[a-zA-Z!-/:-@\[-`{-~]";
break;
case '14':
regex += "[a-z\u4E00-\u9FA5]";
break;
case '15':
regex += "[A-Z\u4E00-\u9FA5]";
break;
case '16':
regex += "[a-zA-Z\u4E00-\u9FA5]";
break;
case '17':
regex += "[\u4E00-\u9FA5!-/:-@\[-`{-~]";
break;
case '18':
regex += "[\u4E00-\u9FA5!-~]";
break;
case '19':
regex += "[a-z\u4E00-\u9FA5!-/:-@\[-`{-~]";
break;
case '20':
regex += "[A-Z\u4E00-\u9FA5!-/:-@\[-`{-~]";
break;
case '100':
regex += "[\s\S]";
break;
default:
alert(matcherFlag + ":This type is not supported!");
}
regex += this.isNotBlank(length) ? "{" + length + "}" : "+";
regex += "$";
var pattern = new RegExp(regex, ignoreCase ? "i" : "");
return pattern.test(input);
},
/**
* @param {String} message
* @param {Array} arr
* 消息格式化
*/
format: function(message, arr) {
return message.replace(/{(\d+)}/g, function(matchStr, group1) {
return arr[group1];
});
},
/**
* 把连续出现多次的字母字符串进行压缩。如输入:aaabbbbcccccd 输出:3a4b5cd
* @param {String} input
* @param {Boolean} ignoreCase : true or false
*/
compressRepeatedStr: function(input, ignoreCase) {
var pattern = new RegExp("([a-z])\\1+", ignoreCase ? "ig" : "g");
return result = input.replace(pattern, function(matchStr, group1) {
return matchStr.length + group1;
});
},
/**
* 校验必须同时包含某些字符串
* @param {String} input
* @param {Object} conditions:里面有多个属性,如下:
*
* @param {String} matcherFlag 匹配标识
* 0:数字;1:字母;2:小写字母;3:大写字母;4:特殊字符,指英文状态下的标点符号及括号等;5:中文;
* 6:数字和字母;7:数字和小写字母;8:数字和大写字母;9:数字、字母和特殊字符;10:数字和中文;
* 11:小写字母和特殊字符;12:大写字母和特殊字符;13:字母和特殊字符;14:小写字母和中文;15:大写字母和中文;
* 16:字母和中文;17:特殊字符、和中文;18:特殊字符、字母和中文;19:特殊字符、小写字母和中文;20:特殊字符、大写字母和中文;
* 100:所有字符;
* @param {Array} excludeStrArr 排除的字符串,数组格式
* @param {String} length 长度,可为空。1,2表示长度1到2之间;10,表示10个以上字符;5表示长度为5
* @param {Boolean} ignoreCase 是否忽略大小写
* conditions={matcherFlag:"0",containStrArr:[],length:"",ignoreCase:true}
*
*/
isPatternMustContainSomeStr: function(input, conditions) {
//参数
var matcherFlag = conditions.matcherFlag;
var containStrArr = conditions.containStrArr;
var length = conditions.length;
var ignoreCase = conditions.ignoreCase;
//创建正则
var size = containStrArr.length;
var regex = "^";
var subPattern = "";
for(var i = 0; i < size; i++) {
containStrArr[i] = Bee.StringUtils.escapeMetacharacterOfStr(containStrArr[i]);
subPattern += "(?=.*" + containStrArr[i] + ")";
}
regex += subPattern;
switch(matcherFlag) {
case '0':
regex += "\\d";
break;
case '1':
regex += "[a-zA-Z]";
break;
case '2':
regex += "[a-z]";
break;
case '3':
regex += "[A-Z]";
break;
case '4':
regex += "[!-/:-@\[-`{-~]";
break;
case '5':
regex += "[\u4E00-\u9FA5]";
break;
case '6':
regex += "[a-zA-Z0-9]";
break;
case '7':
regex += "[a-z0-9]";
break;
case '8':
regex += "[A-Z0-9]";
break;
case '9':
regex += "[!-~]";
break;
case '10':
regex += "[0-9\u4E00-\u9FA5]";
break;
case '11':
regex += "[a-z!-/:-@\[-`{-~]";
break;
case '12':
regex += "[A-Z!-/:-@\[-`{-~]";
break;
case '13':
regex += "[a-zA-Z!-/:-@\[-`{-~]";
break;
case '14':
regex += "[a-z\u4E00-\u9FA5]";
break;
case '15':
regex += "[A-Z\u4E00-\u9FA5]";
break;
case '16':
regex += "[a-zA-Z\u4E00-\u9FA5]";
break;
case '17':
regex += "[\u4E00-\u9FA5!-/:-@\[-`{-~]";
break;
case '18':
regex += "[\u4E00-\u9FA5!-~]";
break;
case '19':
regex += "[a-z\u4E00-\u9FA5!-/:-@\[-`{-~]";
break;
case '20':
regex += "[A-Z\u4E00-\u9FA5!-/:-@\[-`{-~]";
break;
case '100':
regex += "[\s\S]";
break;
default:
alert(matcherFlag + ":This type is not supported!");
}
regex += this.isNotBlank(length) ? "{" + length + "}" : "+";
regex += "$";
var pattern = new RegExp(regex, ignoreCase ? "i" : "");
return pattern.test(input);
},
//中文校验
isChinese: function(input) {
return /^[\u4E00-\u9FA5]+$/.test(input);
},
//去掉中文字符
removeChinese: function(input) {
return input.replace(/[\u4E00-\u9FA5]+/gm, "");
},
//转义元字符
escapeMetacharacter: function(input) {
var metacharacter = "^$()*+.[]|\\-?{}|";
if(metacharacter.indexOf(input) >= 0) {
input = "\\" + input;
}
return input;
},
//转义字符串中的元字符
escapeMetacharacterOfStr: function(input) {
return input.replace(/[\^\$\(\)\*\+\.\[\]\|\\\-\?\{\}\|]/gm, "\\$&");
}
},
/******************************字符串[string]类js***********************************/
/******************************加密算法[encryption]类js***********************************/
encryptionUtils : {
urlEncode : function(str){
if (str == null || str == "") return "";
var newStr = "";
function toCase(sStr) {
return sStr.toString(16).toUpperCase();
}
for (var i = 0,
icode, len = str.length; i < len; i++) {
icode = str.charCodeAt(i);
if (icode < 0x10) newStr += "%0" + icode.toString(16).toUpperCase();
else if (icode < 0x80) {
if (icode == 0x20) newStr += "+";
else if ((icode >= 0x30 && icode <= 0x39) || (icode >= 0x41 && icode <= 0x5A) || (icode >= 0x61 && icode <= 0x7A)) newStr += str.charAt(i);
else newStr += "%" + toCase(icode);
} else if (icode < 0x800) {
newStr += "%" + toCase(0xC0 + (icode >> 6));
newStr += "%" + toCase(0x80 + icode % 0x40);
} else {
newStr += "%" + toCase(0xE0 + (icode >> 12));
newStr += "%" + toCase(0x80 + (icode >> 6) % 0x40);
newStr += "%" + toCase(0x80 + icode % 0x40);
}
}
return newStr;
},
},
}
// 返回可以暴露的内部成员
return tools;
})(window, document, $);
// console.log(lyj);