demoshop

demo, trying to be the best_

正確的計算出中英文字數

  • 2008-10-26 02:00:41
  • 14765

之前demo用過一個簡訊系統,他在計算中英文的時候經常出錯,當初的demo還是個不會寫程式的小玩意,所以也無力修改,今天剛好看到網路有人PO了相關資料,於是就紀錄下來吧,以後應該會用到。

因為簡訊系統這玩意,如果說一封簡訊可以有70個字,輸入一個洋文減一但是輸入中文就會減二,要怎麼明確的判別是不是中文呢?可以利用Unicode的範圍來了解

前128個Unicode字元(16位元從0x0000到0x007F)就是ASCII字元,接下來的128個Unicode字元(代碼從0x0080到0x00FF)是ISO 8859-1對ASCII的擴展。

  • 中國、日本和韓國的象形文字(總稱為CJK)佔用了從0x3000到0x9FFF的代碼
  • 希臘字母表使用從0x0370到0x03FF的代碼
  • 斯拉夫語使用從0x0400到0x04FF的代碼
  • 美國使用從0x0530到0x058F的代碼
  • 希伯來語使用從0x0590到0x05FF的代碼

 


知道了這些資訊就不難玩啦,先建立好測試頁面

<asp:TextBox ID="TextBox1" runat="server" onkeyup="Calculation(this)"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" OnClientClick="Calculation(TextBox1)" Text="Button" />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<span id="show"></span> 

JS的寫法

<script type="text/javascript">
    function Calculation(str) {
        String.prototype.Blength = function() {
            var arr = this.match(/[^\x00-\xff]/ig);
            return arr == null ? this.length : this.length + arr.length;
        }
        var span = document.getElementById("show");
        span.innerHTML = "<br/>字元數:" + str.value.length + "<br>" + "byte數:" + str.value.Blength()
        //字元數就是有幾個字,byte數就是洋文算1中文算2的總和
    }
</script> 

ASP.NET的寫法

protected void Button1_Click(object sender, EventArgs e)
{
    int english=0, chinese = 0,max = 70,i;
    string textStr=this.TextBox1.Text;
    for (i = 0; i < textStr.Length; i++)
    {
        if (textStr[i] >= 0x3000 && textStr[i] <= 0x9FFF)
            chinese++;
        else
            english++;
    }
    this.Label1.Text=string.Format("<br>最大數:{3}<br>洋文:{0}<br>中文:{1}<br>尚有:{2}可輸入",english,chinese,max-(english+chinese*2),max);  
} 

在demo初步測試這玩意還滿準的,如果有啥bug還請通知我勒

 


http://www.dotblogs.com.tw/puma/archive/2008/10/19/5724.aspx
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20080805173342PL2&fumcde=FUM20041006152641OLG

回應討論