@buession/prototype
Version:
A native object extension framework for Javascript.
320 lines (319 loc) • 8.05 kB
JavaScript
/**
* String 对象扩展
*/
/**
* 判断字符串是否存在
*
* @param str 子字符串
* @return boolean
*/
String.prototype.exists = function (str) {
return this.indexOf(str) >= 0;
};
/**
* 判断字符串是否相等
*
* @param str 与此 String 进行比较的对象
* @return boolean
*/
String.prototype.equals = function (str) {
return Object.isUndefinedOrNull(str) === false && this === str;
};
/**
* 判断字符串是否相等,不考虑大小写
*
* @param str 与此 String 进行比较的对象
* @return boolean
*/
String.prototype.equalsIgnoreCase = function (str) {
return str !== undefined && str !== null && this.toLowerCase() === str.toLowerCase();
};
/**
* 判断是否为空字符串
*
* @return boolean
*/
String.prototype.isEmpty = function () {
return this.length === 0;
};
/**
* 判断是否不为空字符串
*
* @return boolean
*/
String.prototype.isNotEmpty = function () {
return this.length > 0;
};
/**
* 判断是否为空白字符串
*
* @return boolean
*/
String.prototype.isBlank = function () {
return this.length === 0 || this.trim().length === 0;
};
/**
* 判断是否不为空白字符串
*
* @return boolean
* @since4.0.2
*/
String.prototype.isNotBlank = function () {
return this.isBlank() === false;
};
/**
* 重复一个字符串
*
* @papram count 重复次数
* @return 重复后的字符串
*/
String.prototype.repeat = function (count) {
if (count < 1) {
return "";
} else {
var s = this.toString();
var result = s;
for (var i = 0; i < count; i++) {
result += s;
}
return result;
}
};
/**
* 截取字符串左边边指定数目的字符串
*
* @param length 截取长度
* @return 子字符串
*/
String.prototype.left = function (length) {
return this.substring(0, length);
};
/**
* 截取字符串右边指定数目的字符串
*
* @param length 截取长度
* @return 子字符串
*/
String.prototype.right = function (length) {
return this.substring(this.length - length, this.length);
};
/**
* 截取字符串,超出部分用 truncation 替代
*
* @param length 截取长度
* @param truncation 替换字符串
* @return 截取后的字符串
* 实际截取长度:当 length 小于等于 truncation 的长度时为,length;当 length 大于 truncation 的长度时为,length - truncation.length
*/
String.prototype.truncation = function (length, truncation) {
truncation = truncation || "...";
return this.length > length ? this.slice(0, length <= truncation.length ? length : length - truncation.length) + truncation : String(this);
};
/**
* 删除字符串开头的空白字符
*
* @return 删除了字符串最左边的空白字符的字符串
*/
String.prototype.ltrim = function () {
return Object.isFunction(this.trimStart) ? this.trimStart() : this.replace(/^\s*/g, "");
};
/**
* 删除字符串结尾的空白字符
*
* @return 删除了字符串最右边的空白字符的字符串
*/
String.prototype.rtrim = function () {
return Object.isFunction(this.trimEnd) ? this.trimEnd() : this.replace(/\s*$/g, "");
};
/**
* 判断字符串是否以给定的字符串开头
*
* @param str 搜索的字符串
* @return boolean
*/
String.prototype.startsWith = function (str) {
return this.indexOf(str) === 0;
};
/**
* 判断字符串是否以给定的字符串结尾
*
* @param str 搜索的字符串
* @return boolean
*/
String.prototype.endsWith = function (str) {
var d = this.length - str.length;
return d >= 0 && this.lastIndexOf(str) === d;
};
/**
* 首字母小写
*
* @return 结果字符串
*/
String.prototype.lcfirst = function () {
return this.charAt(0).toLowerCase() + this.substring(1);
};
/**
* 首字母大写
*
* @return 结果字符串
*/
String.prototype.ucfirst = function () {
return this.charAt(0).toUpperCase() + this.substring(1);
};
/**
* 将 HTML 编码
*
* @return 编码后的字符串
*/
String.prototype.escapeHTML = function () {
return this.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
};
/**
* 将 HTML 实体字符解码
*
* @return 解码后的字符串
*/
String.prototype.unescapeHTML = function () {
return this.replace(/"/g, '"').replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&");
};
/**
* 删除 HTML 标签
*
* @param tag HTML 标签
* @returns 删除标签后的字符串
*/
String.prototype.stripTag = function (tag) {
return this.replace(new RegExp("<" + tag + "(\\s+(\"[^\"]*\"|'[^']*'|[^>])+)?(\/)?>|<\/" + tag + ">", "gi"), "");
};
/**
* 批量删除 HTML 标签
*
* @param tags 删除指定的标签
* @return 删除标签后的字符串
*/
String.prototype.stripTags = function (tags) {
if (typeof tags === "string") {
return this.stripTag(tags);
} else if (Array.isArray(tags)) {
var result = this.toString();
for (var i = 0; i < tags.length; i++) {
result = result.stripTag(tags[i]);
}
return result;
} else {
return this.toString();
}
};
/**
* 删除 script 标签
*
* @return 删除 script 标签后的字符串
*/
String.prototype.stripScripts = function () {
return this.replace(/<script[^>]*>([\S\s]*?)<\/script>/img, "");
};
/**
* 将字符串转换为数组
*
* @param delimiter 分隔字符
* @return 数组
*/
String.prototype.toArray = function (delimiter) {
return this.split(delimiter || "");
};
/**
* 返回一个数组的字符串表示形式
*
* @param useDoubleQuotes 是否使用双引号引住
* @return 后的字符串
*/
String.prototype.inspect = function (useDoubleQuotes) {
var specialChar = {
'\b': '\\b',
'\t': '\\t',
'\r': '\\r',
'\n': '\\n',
'\f': '\\f',
'\\': '\\\\'
};
var escapedString = this.replace(/[\x00-\x1f\\]/g, character => {
if (character in specialChar) {
return specialChar[character];
}
return '\\u00' + character.charCodeAt(0).toPaddedString(2, 16);
});
if (useDoubleQuotes) {
return '"' + escapedString.replace(/"/g, '\\"') + '"';
} else {
return "'" + escapedString.replace(/'/g, '\\\'') + "'";
}
};
/**
* 获取字符串 hash code
*
* @return 字符串 hash code
*/
String.prototype.hashCode = function () {
var result = 0;
if (result === 0 && this.length > 0) {
for (var i = 0; i < this.length; i++) {
result = 31 * result + this.charCodeAt(i);
}
}
return result;
};
/**
* 生成随机字符串
*
* @param length 生成字符串的长度
* @param type 生成类型 / 随机字符串范围
* NUMERIC - 数字随机字符串
* LETTER - 英文随机字符串
* LETTER_NUMERIC - 英文数字混合随机字符串
* CHINESE - 中文随机字符串
*
* @return 生成结果
*/
String.random = function (length) {
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "LETTER_NUMERIC";
var result = "";
if (type === "CHINESE") {
for (var i = 0; i < length; i++) {
result += String.fromCharCode(Math.rand(19968, 40891));
}
return result;
}
var numeric = "0123456789";
var letter = "abcdefghijklmnopqrstuvwxyz";
var characters;
if (type === "NUMERIC") {
characters = numeric;
} else if (type === "LETTER") {
characters = letter + letter.toUpperCase();
} else if (type === "LETTER_NUMERIC" || Object.isUndefinedOrNull(type)) {
characters = numeric + letter + letter.toUpperCase();
} else if (Object.isString(type)) {
characters = type;
} else {
throw "Invalid argument type value, must be: NUMERIC, LETTER, LETTER_NUMERIC, CHINESE or String Characters";
}
var l;
for (var j = 0; j < length; j++) {
l = Math.rand(0, characters.length - 1);
result += characters[l];
}
return result;
};
/**
* 生成 UUID
*
* @return UUID
* @since 4.0.0
*/
String.guid = function () {
function s() {
return ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1);
}
return s() + s() + "-" + s() + "-" + s() + "-" + s() + "-" + s() + s() + s();
};
;