国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

js 將input框中的輸入自動轉化成半角大寫(稅號輸入框)

2024-05-06 15:11:24
字體:
來源:轉載
供稿:網友

這兩天出了這么一個需求,輸入稅號的時候,需要自動將其轉化為半角大寫,并且阻止標點符號中文漢字的輸入。(下面會有:全半角轉換、文本框選中、光標位置判斷、設置光標位置 這些內容)

然后我就開始了慢慢查找資料之路。

首先查了全半角的區別以及如何轉化。

var str = "中文;;a";for (var i = 0; i < str.length; i++) { if (str[i].match(/[/u0000-/u00ff]/)) { console.log("半角字符"); } else if (str[i].match(/[/uff00-/uffff]/)) { console.log("全角字符 " + str[i] + " " + toSBC(str[i])); } else { console.log(str[i]); // 除了數字英文之外的文本,包括中文等各國文字。 }}

這是兩者的區別,將文字轉成unicode之后,進行比較即可,兩者均有自己的范圍,半角為0x20~0x7E,全角為0xFF01~0xFF5E。(這是16進制,前面的0x是代表是16進制)

轉化的話除了空格不同之外,其他均為全角-半角=65248(0xFEE0)

具體的轉化函數如下:(這是網上的一種比較靠譜的方法,但是網上的方法普遍把SBC和DBC寫反了,我這里糾正了一下。)

// 轉全角字符function toSBC(str) { var result = ""; var len = str.length; for (var i = 0; i < len; i++) { var cCode = str.charCodeAt(i); //全角與半角相差(除空格外):65248(十進制) cCode = (cCode>=0x0021 && cCode<=0x007E)?(cCode + 65248) : cCode; //處理空格 cCode = (cCode==0x0020)?0x03000:cCode; result += String.fromCharCode(cCode); } return result;}// 轉半角字符function toDBC(str) { var result = ""; var len = str.length; for (var i = 0; i < len; i++) { var cCode = str.charCodeAt(i); //全角與半角相差(除空格外):65248(十進制) cCode = (cCode>=0xFF01 && cCode<=0xFF5E)?(cCode - 65248) : cCode; //處理空格 cCode = (cCode==0x03000)?0x0020:cCode; result += String.fromCharCode(cCode); } return result;}

全角半角的區別也找完了,開始想辦法轉化,用的是input方法。

var oldValue = "";var $thisDom; // 假裝有jquery的dom元素$thisDom.unbind().bind("input", function (e) { var reg = /^[0-9A-Za-z]*$/; var str = toDBC(e.target.value).toUpperCase(); if (reg.test(str)) { oldValue = str; $(this).val(str); } else { $(this).val(oldValue); }});

但是有一個問題,那就是光標有問題,始終在最后一位輸入的時候沒問題,但是在中間輸入,光標始終會跳到最后一位。于是又有了下面的光標相關知識。

在網上找到了下列相關代碼,用來控制光標位置。

function getCursortPosition(ctrl){ var CaretPos = 0; if (document.selection) { ctrl.focus(); var Sel = document.selection.createRange(); Sel.moveStart('character', -ctrl.value.length); CaretPos = Sel.text.length; } else if (ctrl.selectionStart || ctrl.selectionStart == '0') { CaretPos = ctrl.selectionStart; } return (CaretPos);}function setCaretPosition(ctrl, pos){ if (ctrl.setSelectionRange) { ctrl.focus(); ctrl.setSelectionRange(pos, pos); } else if (ctrl.createTextRange) { var range = ctrl.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 黄冈市| 嘉义县| 黔西| 保山市| 娱乐| 婺源县| 乐亭县| 特克斯县| 葫芦岛市| 临洮县| 东辽县| 巴林左旗| 五原县| 诏安县| 朝阳市| 兰州市| 吉安市| 青河县| 北海市| 海盐县| 杂多县| 修武县| 大理市| 邹平县| 肇源县| 佛教| 七台河市| 建水县| 萨迦县| 佛学| 通渭县| 峨眉山市| 呼伦贝尔市| 宁陕县| 高陵县| 启东市| 太湖县| 饶平县| 陇西县| 皋兰县| 蒙自县|