统计文本中中文字符个数的函数,代码如下:
<script> // 统计汉字数,不包括标点符号 function countChinese(str){ var m=str.match(/[\u4e00-\u9fff\uf900-\ufaff]/g); return (!m?0:m.length); } // 统计非ASCII字符数 function countNonAlphabet(str){ var m=str.match(/[^\x00-\x80]/g); return (!m?0:m.length); } var string="Make a test: 这X-rapido的博客—添加收藏吧!"; alert(countChinese(string)); alert(countNonAlphabet(string)); </script>
这里用到了正则表达式,不会的话学习一下《正则表达式30分钟入门教程》。如果希望统计其他字符的话,只需修改一下正则表达式中的Unicode字符编码,参考Unicode编码表。上面函数用到了ASCII统计,可以参考ASCII码对照表
网上找到另一种用String.split函数来统计中文字符的,发现效率稍差,可使用以下测试对比一下。
正则表达式法
<script> var n = 99999; var s = ""; while(n--) s+="一a"; function countChinese(str){ var m=str.match(/[\u4e00-\u9fff\uf900-\ufaff]/g); return (!m?0:m.length); } var start = new Date(); var m = (countChinese(s)); var time = new Date() - start; alert("countChinese(s): " + m) alert("Time: " + time); </script>
split函数法
<script> var n = 99999; var s = ""; while(n--) s+="一a"; function countChinese2(str){ return str.split(/[\u4e00-\u9fff\uf900-\ufaff]/).length -1; } var start = new Date(); var m = (countChinese2(s)); var time = new Date() - start; alert("countChinese2(s): " + m) alert("Time 2: " + time); </script>