กฎ: charCode ของช่องว่างแบบครึ่งความกว้างคือ 32 และ charCode ของช่องว่างแบบเต็มความกว้างคือ 12288 ความสัมพันธ์ที่สอดคล้องกันระหว่างอักขระแบบครึ่งความกว้างอื่นๆ (33 – 126) และอักขระแบบเต็มความกว้าง (65281 – 65374) คือ : ความแตกต่างคือ 65248
เมื่อคุณพบกฎแล้ว รหัสจะง่ายต่อการเขียน:
var hash = {'32' : 'u3000'};
// ครึ่งความกว้างถึงเต็มความกว้าง
ฟังก์ชั่น sbc2dbc (str) {
var ret = [], i = 0, len = str.length, รหัส, chr;
สำหรับ (; ฉัน < len; ++ i) {
รหัส = str.charCodeAt(i);
chr = แฮช [รหัส];
ถ้า (!chr && รหัส > 31 && รหัส < 127) {
chr = hash[รหัส] = String.fromCharCode(รหัส + 65248);
-
ret[i] = chr ? chr : str.charAt(i);
-
กลับ ret.join('');
-
เหตุผลเดียวกัน:
var hash = {'12288' : ' '};
// เต็มความกว้างถึงครึ่งความกว้าง
ฟังก์ชั่น dbc2sbc(str) {
var ret = [], i = 0, len = str.length, รหัส, chr;
สำหรับ (; ฉัน < len; ++ i) {
รหัส = str.charCodeAt(i);
chr = แฮช [รหัส];
ถ้า (!chr && รหัส > 65280 && รหัส < 65375) {
chr = hash[รหัส] = String.fromCharCode(รหัส - 65248);
-
ret[i] = chr ? chr : str.charAt(i);
-
กลับ ret.join('');
}http://qqface.knowsky.com/
โค้ดด้านบนจะแปลงสัญลักษณ์ในช่วง 33 - 126 ด้วย หลายครั้งนี่ไม่ใช่สิ่งที่เราต้องการ (เช่น การแปลง @ เป็น @) รหัสต่อไปนี้รบกวนน้อยกว่า:
var hash = {};
// แปลงครึ่งความกว้างเป็นเต็มความกว้าง แปลงเฉพาะ [0-9a-zA-Z]
ฟังก์ชั่น sbc2dbc_w (str) {
var ret = [], i = 0, len = str.length, รหัส, chr;
สำหรับ (; ฉัน < len; ++ i) {
รหัส = str.charCodeAt(i);
chr = แฮช [รหัส];
ถ้า (!ch &&
(47 < รหัส && รหัส < 58 ||
64 < รหัส && รหัส < 91 ||
96 < รหัส && รหัส < 123)) {
chr = hash[รหัส] = String.fromCharCode(รหัส + 65248);
-
ret[i] = chr ? chr : str.charAt(i);
-
กลับ ret.join('');
-
-