项目中有这样一个需求。前端html页面是用UTF-8编码的,数据库也是用UTF-8编码的。字符集均为unicode。数据库中的限制一般通常如下:
director varchar2 100 导演
scriptwriter varchar2 100 编剧
compere varchar2 100 节目主持人
guest varchar2 100 受访者
reporter varchar2 100 记者
这些字段都有一个长度限制,长度是以ascii码,也就是字节来计算的,这就带了一个中英文,或者是其他字符用utf-8编码的长度组合问题。可能这样说我说不明白,还是先举例子吧。
什么叫字符集,字符集就是符号的集合。通常我们用的符号就是文字。
http://www.nengcha.com/code/unicode/class/这个网址给出了许多国家的字符集。如下面图示
同样英语的A,B,C,D,汉字的“你我他"这些都是符号,这些有关联,或者成一个系统的符号集合,我们称之为字符集。计算机认识字符集可不是通过”象形“,图像匹配之类进行文字符号识别的,每个符号编个码,就OK。例如在某种字符集中,我们给‘A'编码为1234,’B'为2345,我们就可以通过1234来展示‘A’,2345来展示'B'.A!=B这些关系,都可以通过编码获得。
但是人们的认识总是慢慢接近完美和正确的。中国人发电报,要给汉字编码,他要处理的符号集合就是简体汉字,大概千把个,然后用数字编码,叫做“国标2313”即GB2312这个转换方法。俄罗斯为了展示自己的文字,也搞个编码,同样日本人,蒙古人,玛雅人,古代中国人的甲骨文,繁体字,等等。如果不仔细规划,很可能这些同一个编码数字,用中国人的方法解释是个“马”字,但是俄罗斯的规则解释是个'Д'字。为了解决编码可能存在的冲突,国际组织就把所有的符号作为一个集合,这个集合如此之大,以致可以包含地球上所有文字符号,以及未来的符号。这就是unicode。这大概就是一个整体和局部的关系,同时兼顾了扩展,就像电信分配号段一样,可以照顾到所有,也可以扩展。
编码方式有多种多样,编码方式的不同主要是为了提高存储,迅速解码等等。即使是同一个unicode,就有utf-8,utf-16等等编码方式。UTF-8的编码方式,我是从网上查找到了,是这样的:
符号先找到其unicode码,然后在进行UTF-8编码。
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
我其实不太明白为什么这样做,感觉就像网络协议一样,一层套一层。符号--》unicode编码-->utf-8编码。
解码 UTF-8编码--》unicode码--》显示符号。 直接用unicode编解码不就OK了吗,可能是前面说的用字符集的一个子集来提高编解码的效率吧。
先不管这些了。很重要的信息就是红色那部分。我们再来看一下unicode码划分的字符集。
http://www.nengcha.com/code/unicode/class/
从这个图,我们可以看到unicode被不相交的分配给各个国家的文字符号,猜猜中国字分别在哪里了呢?啊,当然是字符最多的那一段了。
那么,我们的那个项目的问题,就转变成了:在数据库中,一个字段限制为20个字节,那么我输入几个unicode字符,就不可以再输入了?
例如汉字“我”的utf-8编码占三个字节,那么我可以输入6个“我”加上2个‘a',刚好3*6+2=20,这样,我们就可以写一个页面测试一下了。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<body>
ni hao!
<body>
<script>
var bb="年后\u0908,abИфcd";
alert(bb);
alert(bb.length);
for(i=0;i<bb.length;i++)
{
var zi=bb.charAt(i);
alert(zi);
if(zi<='\u007F')
alert(1);
if(zi>'\u007F'&&zi<='\u07FF')
alert(2)
if(zi>'\u07FF'&&zi<='\uFFFF')
alert(3);
}
</script>
经过验证,我们就可以得出一些有用的信息,我们就可以来控制前端输入到多少个字符了。
分享到:
相关推荐
JS的字符串都是string对象,可以用string对象的length属性可以获取其长度,但是无论是中文、全角符号以及英文最小长度单位都是1,这与php的strlen()并不相同。 代码如下: function strlen(str) { var s = 0; for(var...
在Ant Design Vue中实现区分中英文的长度校验功能是一项针对混合文本输入场景的改进,它解决了一个常见的需求,即需要对用户输入的字符数量进行校验,同时能够识别和区分全角字符和半角字符。全角字符和半角字符在...
这些验证脚本是JavaScript中进行数据校验的基本工具,它们可以根据实际需求进行组合和扩展,以满足更复杂的应用场景。例如,你可以结合这些函数创建一个自定义的表单验证器,对用户输入进行全方位的检查。同时,随着...
### HTML限制输入中英文字符详解 #### 一、概述 在网页开发中,为了确保数据的有效性和一致性,经常需要对用户输入的数据进行限制。通过HTML与JavaScript结合的方式,可以实现对用户输入内容的有效控制,例如限制...
1. **长度检查**:通过 `Len` 函数获取输入字符串的长度,并使用 `If` 语句检查长度是否在8到16位之间。 2. **字符类别检测**: - **特殊字符检测**:使用 `Asc` 函数获取每个字符的ASCII码值,并通过一系列条件...
**英文字符验证** ```regex English:/^[A-Za-z]+$/ ``` 验证仅包含英文字母的字符串。 #### 14. **中文字符验证** ```regex Chinese:/^[\u0391-\uFFE5]+$/ ``` 注意,这个正则表达式实际上并不准确地验证中文字符...
在中文和英文混合的文本中,由于中文字符宽度通常大于英文字符宽度,若按英文字符宽度截取中文字符,或按中文字符宽度截取英文字符,很可能会导致显示效果不佳。例如,截取一个昵称时,如果使用英文的标准截取方式,...
而半角字符则指占用一个字节宽度的字符,常用于英文等西方语言环境中的字符。这两种字符的主要区别在于显示宽度和字符编码。 #### 转换原理 全角字符与半角字符在ASCII码范围内的对应关系是有规律可循的。对于大...
3. 正则表达式的性能:复杂的正则表达式可能会有性能问题,尤其是在大数量级的数据校验中。因此,应当尽量保持正则表达式的简洁和高效。 4. 测试用例的编写:要确保密码校验的准确性和可靠性,编写充足的测试用例是...
在这种情况下,我们需要分别计算中文字符和英文字符的数量,然后根据要求对总长度进行限制。 ### 知识点五:layui表单提交与验证规则的使用 在表单提交之前,我们需要确保所有的验证规则都已经设置好,并且能够在...
本篇文章将着重介绍如何使用jQuery这一流行的JavaScript库来检测用户输入的字符串中英文字符和中文字符的数量。 首先,我们来了解一下文章中提到的两种实现方法: 方法一是基于页面加载完成的事件处理。通过$...
- 英文字符通常包括大小写字母,可以使用`/^[a-zA-Z]+$/`来匹配仅包含英文的字符串。 2. **中文输入验证**: - 中文字符属于Unicode的一部分,可以使用`/^[\u4e00-\u9fa5]+$/`来验证是否只包含中文字符。 3. **...
本文档提供的示例代码演示了如何通过JavaScript限制HTML form表单中input输入框的字符长度,具体地限制为20个字符,相当于10个汉字。 知识点一:JavaScript在表单验证中的应用 JavaScript是一种广泛用于客户端的...
在JavaScript中,正则表达式同样发挥着重要作用,尤其是在Node.js环境中进行字符串模式匹配时。本文将详细介绍如何在JavaScript中使用正则表达式进行字符串的模式匹配、提取以及替换。 #### 二、基本概念 正则...
然而,这样的验证方式可能会阻止用户输入其他非汉字的Unicode字符,如标点符号、数字或英文字符。如果你只想禁止输入汉字而允许其他字符,可以在正则表达式中排除它们。例如,如果你想允许英文字符和数字,可以修改...
因此,当处理包含中英文混合的字符串时,如果仅以字符数作为长度限制的依据可能会导致实际字节超出预期。这就要求我们进行字节级别的检查。 在给出的示例中,作者展示了一个名为`notifyTextLength`的函数,这个函数...
5. 只能输入英文字符和数字:`onkeyup`事件中,使用正则表达式`/[\W]/g`匹配非字母和数字字符,并用空格替换,同时在`onbeforepaste`事件中,阻止粘贴非数字字符。 6. 验证邮箱格式:使用正则表达式`/^\w+((-\w+)|...
在网页开发中,jQuery是一个非常流行的JavaScript库,它极大地简化了DOM操作、事件处理和Ajax交互等任务。...在实际开发中,根据具体需求,还可以进一步定制验证逻辑,比如区分中英文字符、考虑换行符等因素。
### JavaScript正则表达式在表单验证中的应用详解 在Web开发中,表单验证是确保数据质量和用户体验的重要环节。JavaScript正则表达式提供了一种强大的工具,用于前端数据校验,确保用户输入的数据格式正确无误。...
- 如果身份证号码长度为9位,前两位英文字符的计算方式略有不同,Java 中会分别乘以9和8;而 JavaScript 版本没有区分,统一乘以9。 - 对于剩余的7位数字,从左到右,每位依次乘以9至2的倒序(7,6,5,4,3,2),然后...