標籤:符號 article html 接下來 沒有 nbsp comm 佔用 js驗證
JS如何判斷文字是全形還是半形(轉載)
轉載自:http://www.php.cn/js-tutorial-362638.html
全形:是一種電腦字元,是指一個全形字元佔用兩個標準字元(或兩個半形字元)的位置。全形佔兩個位元組。半形:是指一個字元佔用一個標準的字元位置。半形佔一個位元組。接下來通過本文給大家介紹JS驗證全形與半形及相互轉化的知識,需要的朋友參考下吧
1.什麼是全形和半形?
全形:是一種電腦字元,是指一個全形字元佔用兩個標準字元(或兩個半形字元)的位置。全形佔兩個位元組。
漢字字元和規定了全形的英文字元及國標GB2312-80中的圖形符號和特殊字元都是全形字元。在全形中,字母和數字等與漢字一樣佔據著等寬的位置。
半形:是指一個字元佔用一個標準的字元位置。半形佔一個位元組。
半形就是 ASCII 方式的字元,在沒有漢字IME起作用的時候,輸入的字母、數字和字元都是半形的。
每個半形字元只佔用一位元組的空間(一位元組有8位,共256個編碼空間)。漢語、日語、及朝鮮文等象形字語言的字型檔量遠大於256個編碼空間,所以改用兩個位元組來儲存。同時,由於中日韓等表意字元的書寫習慣,如果統一使用全形字元的話,排列起來也顯得整齊。
為了排列整齊,英文和其它拉丁文的字元和標點也提供了全形格式。
2.全形和半形的區別
全形和半形主要是針對標點符號來說的,全形標點佔兩個位元組,半形佔一個位元組。不管是半形還是全形,漢字都要佔兩個位元組。
3.js判斷輸入的文字是全形還是半形?
1234 |
str= "中文;;a" alert(str.match(/[\u0000-\u00ff]/g)) //半形 alert(str.match(/[\u4e00-\u9fa5]/g)) //中文 alert(str.match(/[\uff00-\uffff]/g)) //全形 |
4.js對全形與半形的相互轉化
首先,先得明確以下資訊:
a.全形空格為12288,半形空格為32
b.其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248
半形轉化為全形
123456789101112 |
function ToDBC(txtstring) { var tmp = "" ; for ( var i=0;i<txtstring.length;i++{ if (txtstring.charCodeAt(i)==32){ tmp= tmp+ String.fromCharCode(12288); } if (txtstring.charCodeAt(i)<127){ tmp=tmp+String.fromCharCode(txtstring.charCodeAt(i)+65248); } } return tmp; } |
上面用到了js的charCodeAt() 方法與fromCharCode() 方法。
charCodeAt() 方法可返回指定位置的字元的 Unicode 編碼。這個傳回值是 0 - 65535 之間的整數。
fromCharCode() 可接受一個指定的 Unicode 值,然後返回一個字串。
想詳細的瞭解charCodeAt() 方法與fromCharCode()方法,可以點擊《JavaScript charCodeAt() 方法》與《JavaScript fromCharCode() 方法》。
全形轉換為半形
12345678910111213141516 |
function ToCDB(str) { var tmp = "" ; for ( var i=0;i<str.length;i++){ if (str.charCodeAt(i) == 12288){ tmp += String.fromCharCode(str.charCodeAt(i)-12256); continue ; } if (str.charCodeAt(i) > 65280 && str.charCodeAt(i) < 65375){ tmp += String.fromCharCode(str.charCodeAt(i)-65248); } else { tmp += String.fromCharCode(str.charCodeAt(i)); } } return tmp } |
JS如何判斷文字是全形還是半形(轉載)