正確的計算出中英文字數
- 2008-10-26
- 32224
- 0
之前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
回應討論