一、获取中英文混合的长度:
一个汉字是2个字节,一个数字和一个英文是1个字节
方法一:(unicode:汉字的编码大于255)
export const DataLength = (fData) => {
var intLength = 0
for (var i = 0; i < fData.length; i++) {
if ((fData.charCodeAt(i) < 0) || (fData.charCodeAt(i) > 255))
intLength = intLength + 2
else
intLength = intLength + 1
}
return intLength
}
注:(Unicode长度为2,非Unicode长度为1)
方法二:
export const getByteLen=(val)=> {
var len = 0;
for (var i = 0; i < val.length; i++) {
var a = val.charAt(i);
if (a.match(/[^\x00-\xff]/ig) != null) {
len += 2;
} else {
len += 1;
}
}
return len;
}
方法三:
function getLen(val){
var len=0;
var chineseReg=/[^\x00=\xff]/g;
var newVal=str.replace(chineseReg,'**');
return newVal.length;
}
方法四:
基本汉字一共有 20902 个,对应 Unicode 的编码范围是 4E00-9FA5,其中包括了朝鲜文汉字和日文汉字
参考:https://zhuanlan.zhihu.com/p/29813596?utm_source=qq&utm_medium=social
用 var re = /[^u4e00-u9fa5]/;但是测试的时候几个问题.
1.英文的星号* 冒号: 引号” 引号’等符号也会在re.test(xxx);时返回true.
2.英文字母 vwxyz5个字符也会返回true.
二、截取中英文混合的字符串
function subString(str, len) {
var newLength = 0;
var newStr = "";
var chineseRegex = /[^\x00-\xff]/g;
var singleChar = "";
var strLength = str.replace(chineseRegex, "**").length;
for (var i = 0; i < strLength; i++) {
singleChar = str.charAt(i).toString();
if (singleChar.match(chineseRegex) != null) {
newLength += 2;
} else {
newLength++;
}
if (newLength > len) {
break;
}
newStr += singleChar;
}
if (strLength > len) {
newStr += "";
}
return newStr;
}
subString('字符串',3);//'字'
三、charAt和charCodeAt
charAt()方法返回指定索引位置的char值。索引范围为0~length()-1.
charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。
var a="abc";
a.charAt)(0);//a
a.charCodeAt(0);//97