我爱模板网在做今日周边项目时,遇到一个奇葩的需求:输入框输入文字,如果是汉字和中文标点,就算两个长度,如果是英文就算一个长度。而且,输入框要限制:纯中文,就限制10个,超出截断,中文+英文混写或者纯英文,就限制20个,超出截断。之前我爱模板网写过一个有点类似的:js截取等长的英文和中文字符串 http://www.5imoban.net/jiaocheng/jquery/201907013590.html
首先是计算问题,我爱模板网在网上找到了下面几个方法,都还不错:
方法一:
01 | String.prototype.gblen = function () { |
03 | for ( var i=0; i< this .length; i++) { |
04 | if ( this .charCodeAt(i)>127 || this .charCodeAt(i)==94) { |
方法二:
03 | for ( var i=0; i<str.length; i++) { |
04 | var c = str.charCodeAt(i); |
06 | if ((c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f)) { |
方法三:
02 | jmz.GetLength = function (str) { |
05 | var realLength = 0, len = str.length, charCode = -1; |
06 | for ( var i = 0; i < len; i++) { |
07 | charCode = str.charCodeAt(i); |
08 | if (charCode >= 0 && charCode <= 128) realLength += 1; |
方法四:
4 | if ((str.charCodeAt(i) & 0xff00) != 0) { |
方法五:把双字节的替换成两个单字节的然后再获得长度
getBLen = function(str) {
if (str == null) return 0;
if (typeof str != "string"){
str += "";
}
return str.replace(/[^\x00-\xff]/g,"01").length;
}
至于实现字符超出截断,请看下面代码:
01 | <input placeholder= "在此输入备注" value= "{{value}}" focus= "true" bindinput= "inputValue" maxlength= "20" ></input> |
08 | inputValue: function (e) { |
09 | var val = e.detail.value; |
10 | var len = this .strlen(val); |
12 | val = val.substring(0, this .strAt(val)); |
15 | valueLength: this .strlen(val), |
17 | showClear: val.length>0 |
22 | for ( var i = 0; i<str.length; i++) { |
23 | var c = str.charCodeAt(i); |
24 | if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) { |
36 | for ( var i = 0; i < str.length; i++) { |
37 | var c = str.charCodeAt(i); |
38 | if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) { |