自己写的js substr支持中文截取(中文是双字符)

简介:
Sb_substr代码   收藏代码
  1. //得到字符总数  
  2. function getChars(str) {  
  3.     var i = 0;  
  4.     var c = 0.0;  
  5.     var unicode = 0;  
  6.     var len = 0;  
  7.   
  8.     if (str == null || str == "") {  
  9.         return 0;  
  10.     }  
  11.     len = str.length;  
  12.     for(i = 0; i < len; i++) {  
  13.             unicode = str.charCodeAt(i);  
  14.         if (unicode < 127) { //判断是单字符还是双字符  
  15.             c += 1;  
  16.         } else {  //chinese  
  17.             c += 2;  
  18.         }  
  19.     }  
  20.     return c;  
  21. }  
  22.   
  23. function sb_strlen(str) {  
  24.     return getChars(str);  
  25. }  
  26. //截取字符  
  27. function sb_substr(str, startp, endp) {  
  28.     var i=0; c = 0; unicode=0; rstr = '';  
  29.     var len = str.length;  
  30.     var sblen = sb_strlen(str);  
  31.   
  32.     if (startp < 0) {  
  33.         startp = sblen + startp;  
  34.     }  
  35.   
  36.     if (endp < 1) {  
  37.         endp = sblen + endp;// - ((str.charCodeAt(len-1) < 127) ? 1 : 2);  
  38.     }  
  39.     // 寻找起点  
  40.     for(i = 0; i < len; i++) {  
  41.         if (c >= startp) {  
  42.             break;  
  43.         }  
  44.         var unicode = str.charCodeAt(i);  
  45.         if (unicode < 127) {  
  46.             c += 1;  
  47.         } else {  
  48.             c += 2;  
  49.         }  
  50.     }  
  51.   
  52.     // 开始取  
  53.     for(i = i; i < len; i++) {  
  54.         var unicode = str.charCodeAt(i);  
  55.         if (unicode < 127) {  
  56.             c += 1;  
  57.         } else {  
  58.             c += 2;  
  59.         }  
  60.         rstr += str.charAt(i);  
  61.   
  62.         if (c >= endp) {  
  63.             break;  
  64.         }  
  65.     }  
  66.   
  67.     return rstr;  
  68. }  
  69. //调用示例:  
  70. function getShortFileName(filename) {  
  71.     short_filename = filename;  
  72.     if (sb_strlen(short_filename) > 61) {  
  73.         short_filename = sb_substr(short_filename, 036) + ' ... ' + sb_substr(short_filename, -20);  
  74.     }  
  75.     return short_filename;  
  76. }  
  77.   
  78. var chara = 'ni你2好1啊!'  
  79. js_self = chara.substr(4);  
  80. test = sb_substr(chara,4);  
  81. alert("js_self:"+js_self+"ext:"+test);  
  82.   
  83. function mb_strlen(str) {  
  84.     var len = 0;  
  85.     for(var i = 0; i < str.length; i++) {  
  86.         len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1;  
  87.     }  
  88.     return len;  
  89. }  
  90.   
  91.  <script language="JavaScript">  

<!--
function CutStrLength(str,Ilength)
{
var tmp=0;
var len=0;
var okLen=0
for(var i=0;i<Ilength;i++)
{
if(str.charCodeAt(i)>255)
tmp+=2
else
len+=1
okLen+=1
if(tmp+len==Ilength)
{
return (str.substring(0,okLen));
break;
}
if(tmp+len>Ilength)
{
return (str.substring(0,okLen-1)+"");
break;
}
}
}
function checkFieldLength(fieldName,fieldDesc,fieldLength)
{
var str=document.getElementById(fieldName).value;
var theLen=0;
var teststr='';
for(i=0;i<str.length;i++)
{
teststr=str.charAt(i);
if(str.charCodeAt(i)>255)
theLen=theLen+2;
else
theLen=theLen+1;
}
document.getElementById('showMsg').innerText=theLen;
if(theLen>fieldLength)
{
document.getElementById('showMsg').innerText=fieldDesc;
//alert(fieldDesc+" 的字段长度超过规定长度!");
//document.getElementById(fieldName).focus();
document.getElementById(fieldName).value=CutStrLength(str,fieldLength);
return false;
}
else
{
return true;
}
}
//-->
</script>

</head>
<body>
<form method="POST" action="">
<textarea id="testArea" name="testArea" rows="3" cols="22" onkeyup="checkFieldLength('testArea', '超过允许输入的字符个数', 20);"
onchange="checkFieldLength('testArea', '超过允许输入的字符个数', 20);"></textarea>
<div id="testInfo">
已经输入:<span id="showMsg"></span></div>
</form>
</body>
</html>

相关文章
|
JavaScript 前端开发 API
js截取图片地址后面的参数和在路径中截取文件名或后缀名
在处理网页上的图片资源或者其他类型的文件资源时,你可能会遇到需要使用这些技巧的情况。以下是一些具体的使用场景:
662 0
|
JavaScript 前端开发 安全
JavaScript编程实现字符和字符串翻转
JavaScript编程实现字符和字符串翻转
|
存储 JavaScript
js切割截取字符串方法
js切割截取字符串方法
297 2
|
前端开发 JavaScript 安全
前端JS实现密码校验键盘横竖、26字母、相同字母、相同数字、密码包含用户名、数字 字母不能连续 不能相同三个、不能横向 竖向 连续三个 包含字符、不能有中文符号
该 JavaScript 代码实现了一个严格的密码校验功能,确保密码满足多种安全要求,包括长度、字符类型、不包含中文及特殊字符、不与用户名相似等。通过多个辅助函数,如 `validateFormat` 检查密码格式,`isHasChinaCharFun` 检测中文符号,`getCharAll` 生成键盘组合,以及 `checkPasswordFun` 综合验证密码的有效性和安全性。此工具对于提高用户账户的安全性非常有用。
633 0
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
|
存储 文字识别 前端开发
用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能
用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
387 0
|
JavaScript 前端开发 索引
JS中的substr()和substring()函数有什么区别
JS中的substr()和substring()函数有什么区别
|
JavaScript
js 判断字符串是否包含中文,判断字符串是否全是中文,判断字符是否为中文
js 判断字符串是否包含中文,判断字符串是否全是中文,判断字符是否为中文
1030 0
|
JavaScript 前端开发
JS中判断一个字符串中出现次数最多的字符,统计这个次数?
JS中判断一个字符串中出现次数最多的字符,统计这个次数?
208 0