常用String扩展(JavaScript)

/**
 * -------------------------------------------------------------
 * 删除首尾空格
 * 如果限定了长度的话, 则区分全/半角截短字符串, 2个ASCII字符按1个字符计数
 * 截取后的显示长度不会超过限定长度, 省略号也计算在内
 * -------------------------------------------------------------
 * 如: " abc ".trim() --> "abc"
 * 如: "even偶数".trim(3) --> "<span title=\"even偶数\">even..</span>"
 * 如: "even偶数".trim(4) --> "even偶数" // 4个英文=2个汉字
 * 如: "even偶数!".trim(4) --> "<span title=\"even偶数!\">even偶..</span>"
 * 如: "odd奇数".trim(2) --> "<span title="odd奇数">od..</span>"
 * -------------------------------------------------------------
 * author: zhaohuihua
 * date: 2011-01-05
 * -------------------------------------------------------------
 */
String.prototype.trim = function(len) {
	var s = this.replace(/(^\s+|\s+$)/g, "");
	if(len === undefined || isNaN(len = parseInt(len)))
		return s;
	var idx = 0, charlen = 0; len = (len - 1) * 2;
	for(var i = 0; i < s.length; i ++) {
		var code = s.charCodeAt(i);
		var ascii = code >= 0 && code <= 255;
		if((charlen += (ascii ? 1 : 2)) <= len) idx ++;
	}
	if(charlen <= len + 2) return s;
	else return "<span title=\"{0}\">{1}..</span>".format(s, s.substring(0,idx));
};
/**
 * 求字符串的长度, 1个汉字按2个字符计算
 */
String.prototype.size = function(len) {
	var count = 0;
	for(var i = 0; i < this.length; i ++) {
		var code = this.charCodeAt(i);
		count += (code >= 0 && code <= 255) ? 1 : 2;
	}
	return count;
};
/**
 * -------------------------------------------------------------
 * 字符串格式化
 * -------------------------------------------------------------
 * 如: "Name:{0}, Email:{1}".format("zhaohuihua", "zhaohuihua@126.com")
 * --> Name:zhaohuihua, Email:zhaohuihua@126.com
 * -------------------------------------------------------------
 * author: zhaohuihua
 * date: 2011-01-05
 * -------------------------------------------------------------
 */
String.prototype.format = function() {
	var args = arguments;
	return this.replace(/\{(\d{1,2})\}/g, function(old, index) {
		var value = args[index]
		return value === undefined ? "" : value;
	});
};
/**
 * -------------------------------------------------------------
 * 字符串加载JSON数据, 是字符串格式化的加强版
 * -------------------------------------------------------------
示例:
var json = {
    id:1001, name:"Avril Lavigne", extra:{download:1888, click:1999},
    image:[{type:"pvw",path:"1001.1.jpg"},{type:"main",path:"1001.2.jpg"}],
    music:["Runaway", "Innocence", "Contagious"]
};
"<li>{id}</li><li>{name.substring(0, 5)}</li>".load(json)
--> <li>1001</li><li>Avril</li>
"<li>{extra.click}</li><li>{image[1].path}</li>".load(json)
--> <li>1999</li><li>1001.2.jpg</li>
"<li>{music[0]}</li><li>{music[1]}</li><li>{music[2]}</li>".load(json)
--> <li>Runaway</li><li>Innocence</li><li>Contagious</li>
 * -------------------------------------------------------------
 * author: zhaohuihua
 * date: 2011-01-05
 * -------------------------------------------------------------
 */
String.prototype.load = function(json) {
	// 首字母不能为数字, 以免与format()冲突
	var RPL = /\{([^0-9][^{}]*)\}/ig;
	return this.replace(RPL, function(old, exp) {
		try {
			var isArray = /\[[0-9]+\].*/.test(exp),
				value = eval("json" + (isArray ? "" : ".") + exp);
			return value === undefined ? "" : value;
		} catch (e) {
			return "";
		}
	});
};
/**
 * -------------------------------------------------------------
 * 相当于oracle的decode函数
 * -------------------------------------------------------------
 * 如: "1".decode("1", "男", "2", "女", "未知") --> 男
 * 如: "3".decode("1", "男", "2", "女", "未知") --> 未知
 * -------------------------------------------------------------
 * author: zhaohuihua
 * date: 2011-01-05
 * -------------------------------------------------------------
 */
String.prototype.decode = function() {
	if(arguments.length < 2) return null; // 参数不够
	for(var i = 0; i < arguments.length;) {
		// 每两个为一组
		var key = arguments[i++], val = arguments[i++];
		if(this == key) return val;
		// 最后多出来的一个为默认值
		if(i + 1 == arguments.length) return arguments[i];
	}
	return null;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值