JavaScript计算中英文混合字符串长度的方法

作者:拾光时间:2026-10-27 21:38:38浏览:123

本文介绍在JavaScript中计算中英文混合字符串长度的技巧。通过正则表达式[^ -~]识别非ASCII字符(如汉字),将汉字长度额外累加,解决数据库提交时因汉字占位问题导致的长度超标错误。

JavaScript计算中英文混合字符串长度的方法

有同事在公司OA系统发帖,分享了在JavaScript中计算中英文混合字符串长度的方法。该方法主要依赖正则表达式实现。

具体实现代码如下:

 
var str = ”坦克是tank的音译”;
var len = str.match(/[^ -~]/g) == null ? str.length : str.length + str.match(/[^ -~]/g).length ;

查阅相关资料后,我对原理有了清晰的理解:



西文常用字符集的范围是从空格“ ”(0x20)到“~”(0x7e)。汉字不在此范围内,因此正则表达式[^ -~]用于匹配空格到“~”之外的字符。


相关代码逻辑如下:

 
string.match(regex)方法会返回一个数组,包含字符串string中所有匹配正则表达式regex的子串。因此:
str.match(/[^ -~]/g)会返回一个包含所有汉字的数组。例如:
var str = "dd大哥";
// 显示"大,哥",数组中包含两个汉字,数组长度为2
alert(str.match(/[^ -~]/g));

通过上述逻辑,var len = str.match(/[^ -~]/g) == null ? str.length : str.length + str.match(/[^ -~]/g).length ;即可准确计算str的长度。



在JavaScript中,一个汉字通常被计算为长度1。这常导致提交到数据库时出现长度超标错误。使用此方法可在提交前进行预检测。



注:原始代码中存在部分符号错误,经修正后封装为如下函数。


修正后的代码如下:

 
function get_strlength (str)
{ 
var len = 0;
if (str.match(/[^ -~]/g) == null)
{ 
len = str.length;
} 
else
{ 
len = str.length + str.match(/[^ -~]/g).length;
} 
return len;
} 
作者最新文章