asp.net中如何计算中英文混合字符串长度

在排版中我们基本认为一个英文字符占据宽度基本为汉字的1/2,twitter中的140个字符,用英语来写的话其实写不几个单词,而中文的140个汉字就基本能把一个观点表达清楚。因此有些情况是要求英文字符是按中文字符的半个来计算的,那么可以使用正则表达式来匹配每个字符是否为汉字。以下根据不同需要来进行匹配

[\u4E00-\u9FA5] 匹配简体

[\u4E00-\u9FFF] 匹配简体和繁体

[\u2E80-\u9FFF] 匹配所有东亚区的语言  

    /// <summary>
    /// 检查中英文混合字符长度(英文字符算0.5,中文算1)
    /// </summary>
    /// <param name="source"></param>
    /// <returns></returns>
    private float GetStringLengthWithChinlish(string source)
    {
        Regex r = new Regex(@"[\u4E00-\u9fa5]");//中文
        float len = 0.0F;
        char[] stringChar = source.ToCharArray();
        foreach (char chr in stringChar) {
            Console.Write(chr.ToString());
            if (r.IsMatch(chr.ToString())) {
                len += 1;
            } else {
                len += 0.5F;
            }
        }

        return len;
    }

运行效果:

asp.net中如何计算中英文混合字符串长度

posted @ 2011-08-01 16:10  walkingp  阅读(2938)  评论(2)    收藏  举报