最近发现公司系统中调用api发布的微博字数统计和新浪微博中的字数统计不一致,原来是链接的问题。
新浪微博的字数统计是一个长链接不管多长,统一记成10个字(其他:中文字符为一个长度,英文、数字、标点符号2个为一个长度)。所以对于发布长链接的话,需要过滤一下url再进行统计,故把它们的代码弄下来分享,测试代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>微博计算字数</title>
<script>
function b(b) {
var c = 41, d = 140, e = 20, f = b, g = b
.match(/(http|https):\/\/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+([-A-Z0-9a-z_\$\.\+\!\*\(\)\/\,\:;@&=\?~#%]*)*/gi)
|| [], h = 0;
for ( var i = 0, j = g.length; i < j; i++) {
var k = bLength(g[i]);
if (/^(http:\/\/t.cn)/.test(g[i]))
continue;
/^(http:\/\/)+(t.sina.com.cn|t.sina.cn)/.test(g[i])
|| /^(http:\/\/)+(weibo.com|weibo.cn)/.test(g[i]) ? h += k <= c ? k
: k <= d ? e : k - d + e
: h += k <= d ? e : k - d + e;
f = f.replace(g[i], "")
}
var l = Math.ceil((h + bLength(f)) / 2);
return l;
}
function bLength(a) {
if (!a)
return 0;
var b = a.match(/[^\x00-\xff]/g);
return a.length + (b ? b.length : 0)
}
function count() {
var a = document.getElementById("allContent").value;
a = a.replace(/\r\n/g, "\n");
alert(b(a));
document.getElementById("num").value = b(a);
//return b(a);
}
</script>
</head>
<body>
<textarea rows="5" cols="20" id="allContent"></textarea>
<input type="button" οnclick="count()" value="统计字数">
<br />
<input id="num" value="">
</body>
</html>
结果:长度为12