用JavaScript计算在UTF-8下存储字符串占用字节数


Posted in Javascript onAugust 08, 2013

最近和JavaScript纠缠上了。

遇到这么一个问题,数据库的字符集为UTF-8的,要在页面上使用JavaScript验证输入的文本用UTF-8存储时占用字节长度。JavaScript的String对象有length属性,但是这个计算的是字符数,不是字节数(问题总是翻来覆去的,记得当年玩Delphi的时候,还得写程序计算字符串的字符数,因为Delphi中String的length是字节数...)。偷懒一点的办法是将验证代码中最大长度设置为数据库中对应字段的长度的1/3,但是这样准确来说有点不合适。

所以想办法在JavaScript中判断在UTF-8下存储的String的字节数,在网上找到很多关于Unicode介绍的文档,最重要的是字符编码数值对应的存储长度:

UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx (1字节)
0080 - 07FF 110xxxxx 10xxxxxx (2字节)
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx (3字节)

于是代码如下:
[

function mbStringLength(s) { 
var totalLength = 0; 
var i; 
var charCode; 
for (i = 0; i < s.length; i++) { 
charCode = s.charCodeAt(i); 
if (charCode < 0x007f) { 
totalLength = totalLength + 1; 
} else if ((0x0080 <= charCode) && (charCode <= 0x07ff)) { 
totalLength += 2; 
} else if ((0x0800 <= charCode) && (charCode <= 0xffff)) { 
totalLength += 3; 
} 
} 
//alert(totalLength); 
return totalLength; 
}

实际上,0x0080到0x07ff之间的字符很少会在实际用户输入中用到。
Javascript 相关文章推荐
javascript字典探测用户名工具
Oct 05 Javascript
JavaScript将一个数组插入到另一个数组的方法
Mar 19 Javascript
JavaScript对象反射用法实例
Apr 17 Javascript
jQuery短信验证倒计时功能实现方法详解
May 25 Javascript
详解AngularJS中的表单验证(推荐)
Nov 17 Javascript
JS+HTML5实现图片在线预览功能
Jul 22 Javascript
浅谈vue路径优化之resolve
Oct 13 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
Nov 28 Javascript
javascript实现文本框标签验证的实例代码
Oct 14 Javascript
Vue项目中Api的组织和返回数据处理的操作
Nov 04 Javascript
Javascript实现简易天数计算器
May 18 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
Jan 29 Javascript
Jquery chosen动态设置值实例介绍
Aug 08 #Javascript
extjs两个tbar问题探讨
Aug 08 #Javascript
JS实现随机数生成算法示例代码
Aug 08 #Javascript
判断是否安装flash player及当前版本的JS代码
Aug 08 #Javascript
js 为label标签和div标签赋值的方法
Aug 08 #Javascript
JS模拟自动点击的简单实例
Aug 08 #Javascript
动态改变div的z-index属性的简单实例
Aug 08 #Javascript
You might like
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
php中一个完整表单处理实现代码
2011/11/10 PHP
php批量删除操作代码分享
2017/02/26 PHP
jQuery textarea的长度进行验证
2009/05/06 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
python logging模块的使用详解
2020/10/23 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
职工运动会邀请函
2014/01/19 职场文书
妇产医师自荐信
2014/01/29 职场文书
药品促销活动方案
2014/02/14 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js
Java Spring读取和存储详细操作
2022/08/05 Java/Android