JavaScript的String的属性length把中文算为一个字符。
判断是中文的方法是:
if (str.charAt(i)>'~') ……  
//一般的中文字符是由两个大于162字符来组成的,而'~'的ASCII码是127,故通过如此方法来判断。
判断是数字的方法是:
if (str.charAt(i)>='0' && str.charAt(i)<='9') ……
另外给出判断一字符串的字符数方法(中文算为两个字符):
function _length(str)
{
  var len=0;
  for(var i=0;i< str.length;i++)
    if (str.charAt(i)>'~') len+=2; else len++;
  return len;
}

解决方案 »

  1.   

    JavaScript使用Unicode,所以所有的字符都当作一个字符,不存在中文字算两个字符的问题。
    楼上的判断方法有误。charAt返回的是一个字符,而不是半个字符!
    唯有用unicode来计算!
    通过判断unicode来分别是哪种语言。
      

  2.   

    function isChinese(sChar){
    if(sChar.charCodeAt(0)>127)return true;
    return false
    }
      

  3.   

    同意Hax, 不过需要知道 中文 在 unicode 标准里面的位置 或者说范围
      

  4.   

    to hax(海曦)
        我说的中文做两个字符是很原始的定义方法,而且在显示中通常一个汉字会占去两个字符的位置。我也已经说了“JavaScript的String的属性length把中文算为一个字符。”
        但在实际的JavaScript判断中 
    "中">'~'==true
    要分别出汉字的话,用此法也可以通过。
    我上边的_length()是用来计算这个串在显示的时候要用多宽的空间的,所以是汉字的时候看作两个字符。to zeric() :
    改成127是错的。你是一下就知道了。
      

  5.   

    但是我直觉你的方法会把不是汉字的也算进汉字吧。有可能把一些希腊字母之类也算成汉字?毕竟unicode字符集比较复杂。正规的途径还是必须通过unicode来判断。我自己也这样做的。有个方法可以得到范围。就是有函数可以从unicode值得到字符,名字一时忘了,请看js的说明书。用此循环一下显示就知道了。
      

  6.   

    是的,我验证了一下。按照前面的方法,会把 &copy 版权符号、欧元符号、英镑符号等都算做中文。显然这是有问题的。事实上在unicode从32的空格到126的“~”就是基本拉丁字符集。但在~之上还有拉丁语扩展集、希腊语、西里尔语、阿拉伯语、希伯莱语、广义标点、上标和下标……许多并非中文的字符集!其中有许多符号还是很常用的!因为javascript是用unicode的,所以从理论上说,按一般的等长的utf-16编码,每个字符都是16位也就是2个字节的。而我们通常要换算GB2312编码的。然而javascript并不知道网页用的是什么编码,GB2312或者Big5,更没有内置的编码转换功能(使用Unicode正是为了避免这种情况),所以从根本上说是无法真正精确的计算特定编码环境下的长度的!只有服务器端的脚本比如JSP可以通过Java的国际化支持下的字符集转换函数来计算对应特定编码情况下的字节长度。唯一可行的就是采用一些近似的方法,根据中文字符集在Unicode的位置来估算。