有时在显示某段文字的时候,可能会太长,影响我们页面的显示效果。如果仅是英文,那么我们可以用String.substring(start, end)函数就已经够用了。但是通常我们都会遇到既有英文,又有汉字的情况。而汉字是占用2个字节的,如果用String.substring(start, end)截取字符串的话,会发现汉字截取后比英文截取后个数虽然相同,但是长度还是长出去不少(具体要视字符个数来决定)。

下面是一个实现这个功能的函数:

  1. <script language="javascript" type="text/javascript">
  2. var str = "欢迎访问简明现代魔法";
  3. document.write( cutstr(str, 8) );
  4.  
  5. //js截取字符串,中英文都能用
  6. //如果给定的字符串大于指定长度,截取指定长度返回,否者返回源字符串。
  7. //字符串,长度
  8.  
  9. /**
  10. * js截取字符串,中英文都能用
  11. * @param str:需要截取的字符串
  12. * @param len: 需要截取的长度
  13. */
  14. function cutstr(str,len)
  15. {
  16. var str_length = 0;
  17. var str_len = 0;
  18. str_cut = new String();
  19. str_len = str.length;
  20. for(var i = 0; i < str_len; i++)
  21. {
  22. a = str.charAt(i);
  23. str_length++;
  24. if(escape(a).length > 4)
  25. {
  26. //中文字符的长度经编码之后大于4
  27. str_length++;
  28. }
  29. str_cut = str_cut.concat(a);
  30. if(str_length>=len)
  31. {
  32. str_cut = str_cut.concat("...");
  33. return str_cut;
  34. }
  35. }
  36. //如果给定字符串小于指定长度,则返回源字符串;
  37. if(str_length < len){
  38. return str;
  39. }
  40. }
  41. </script>

也可以使用自定义JavaScript原生方法来实现。

  1. <script language="javascript" type="text/javascript">
  2.  
  3. //计算字符串长度
  4. String.prototype.strLen = function() {
  5. var len = 0;
  6. for (var i = 0; i < this.length; i++) {
  7. if (this.charCodeAt(i) > 255 || this.charCodeAt(i) < 0) len += 2; else len ++;
  8. }
  9. return len;
  10. }
  11.  
  12. //将字符串拆成字符,并存到数组中
  13. String.prototype.strToChars = function(){
  14. var chars = new Array();
  15. for (var i = 0; i < this.length; i++){
  16. chars[i] = [this.substr(i, 1), this.isCHS(i)];
  17. }
  18. String.prototype.charsArray = chars;
  19. return chars;
  20. }
  21.  
  22. //判断某个字符是否是汉字
  23. String.prototype.isCHS = function(i){
  24. if (this.charCodeAt(i) > 255 || this.charCodeAt(i) < 0)
  25. return true;
  26. else
  27. return false;
  28. }
  29.  
  30. //截取字符串(从start字节到end字节)
  31. String.prototype.subCHString = function(start, end){
  32. var len = 0;
  33. var str = "";
  34. this.strToChars();
  35. for (var i = 0; i < this.length; i++) {
  36. if(this.charsArray[i][1])
  37. len += 2;
  38. else
  39. len++;
  40. if (end < len)
  41. return str;
  42. else if (start < len)
  43. str += this.charsArray[i][0];
  44. }
  45. return str;
  46. }
  47.  
  48. //截取字符串(从start字节截取length个字节)
  49. String.prototype.subCHStr = function(start, length){
  50. return this.subCHString(start, start + length);
  51. }
  52.  
  53. var str = "欢迎abc访问简明现代魔法";
  54.  
  55. var str1 = str.subCHStr(0, 9);
  56. //var str2 = str.subCHStr(2, 4);
  57. //alert(str1 + " == " + str2);
  58.  
  59. document.write( str1 );
  60. </script>

具体使用很简单,跟String.subString(start, end)一样使用就可。比如:

  1. var str = "欢迎abc访问简明现代魔法";
  2. var str1 = str.subCHStr(2, 2);
  3. var str2 = str.subCHString(2, 4);
  4. alert(str1 + " == " + str2);

JavaScript截取中英文字符串的更多相关文章

  1. js截取中英文字符串、标点符号无乱码示例解读

    <script> function subString(str, len, hasDot) { var newLength = 0; var newStr = ""; ...

  2. smarty中用truncate来截取中英文字符串及避免中文乱码问题

    smarty中用truncate来截取含有中英文的字符串,可能会出现中文乱码问题.字符串截取长度不一问题,下面是新建个扩展函数,或修改原Truncate函数方法也可以的.扩展smarty/plugin ...

  3. PHP截取中英文字符串

    //如果字符串长度超过10,则截取并以省略号结尾 function sub($str){ $str=(string)$str; if( mb_strlen($str,'utf-8') >10){ ...

  4. javascript截取字符串(支持中英文混合)

    javascript截取字符串(支持中英文混合) <script type="text/javascript"> var sub=function(str,n){ va ...

  5. php截取中文字符串,英文字符串,中英文字符串长度的方法

    今天学习了php函数截取中文字符串,英文字符串,中英文字符串的函数使用方法.对中英文截取方法不理解,此处先做记录. PHP自带的函数如strlen().mb_strlen()都是通过计算字符串所占字节 ...

  6. CSS截取中英文混合字符串长度

    <!doctype html> <html> <head> <meta http-equiv="content-type" content ...

  7. javascript截取字符串的最后几个字符

    在JavaScript中截取字符串一般是使用内置的substring()方法和substr()方法,这两个方法功能都很强大,也都能实现截取字符串中的最后几个字符. substring()方法 Java ...

  8. Java 截取中英文混合字符串

    题目: 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入&q ...

  9. 中英文字符串截取函数msubstr

    Thinkphp内置了一个可以媲美smarty的模板引擎,给我们带来了很大的方便.调用函数也一样,可以和smarty一样调用自己需要的函数,而官方也内置了一些常用的函数供大家调用. 比如今天我们说的截 ...

随机推荐

  1. Selenium(Python)调用pywin32上传图片

    import unittestfrom time import sleep import osfrom selenium import webdriverimport win32apiimport w ...

  2. Unity Shader学习笔记 - 用UV动画实现沙滩上的泡沫

    这个泡沫效果来自远古时代的Unity官方海岛Demo, 原效果直接复制3个材质球在js脚本中做UV动画偏移,这里尝试在shader中做动画并且一个pass中完成: // Upgrade NOTE: r ...

  3. 利用爬虫、SMTP和树莓派3B发送邮件(爬取墨迹天气预报信息)

    -----------------------------------------学无止境----------------------------------------- 前言:大家好,欢迎来到誉雪 ...

  4. CSP201403-2:窗口

    引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...

  5. PHP正则相关

    描述字符串排列模式的一种自定义语法规则 如果可以使用字符串函数处理的任务 就不要使用正则 正则表达式 就是通过构建具有特定规则的模式,与输入的字符信息比较 在进行 分割 匹配 查找 替换 等工作   ...

  6. 关于mysql开元数据库的几个随想

    现在已经是凌晨了,昨天晚上写了我人生中的第一篇笔记,觉得没什么可写的,写了一个多小时都没写出什么,现在突然想写点东西了,这是一个比较有趣的问题,前两个月换了新工作,记得当初面试这份工作的时候面试到第三 ...

  7. Ubuntu16.04安装truffle时的一些错误

    1.使用truffle时出现 Error: /usr/bin/env: node: 没有那个文件或目录 1.如果是用sudo apt-get install nodejs命令安装的nodejs, ub ...

  8. nodejs笔记--mysql篇(四)

    测试连接 var mysql = require('mysql'); //调用MySQL模块 //创建一个connection var connection = mysql.createConnect ...

  9. CP文件覆盖问题

    # \cp -r -a aaa/* /bbb[这次是完美的,没有提示按Y.传递了目录属性.没有略过目录]

  10. Linux GCC编译

    .a 静态库(打包文件 由多个.o文件打包而成) .c 未经过预处理的C源码 .h C头文件 .i 经过预处理的C源码(将头文件内容加载到c文件中) .o 编译之后产生的目标文件 .s 生成的汇编语言 ...