ThinkSNS+ 如何计算字符显示长度

简介:

今天我们来聊一下可能很多人都会头疼的东西:显示长度。

需求是这样的,在字符的显示上,两个英文单词才占一个中文或者其他语言的显示长度。如下:

_1

上面排的是两个英文字母,一个汉字,一个Emoji。你会发现,在显示上占的宽度是一致的。一些设计上为了好看也要求有这样的处理。

例如,我们的用户名需求是最多12个非单字节字符或者24个单字节字符的需求也可以混合排的需求,我们写后端不得不处理这样的验证了。

需求规则是 /^a-zA-Z_x7f-xff*$/

在ThinkSNS+中,为了能把这部分验证公用,所以选择使用自定义验证规则。我们先说下计算的实现思路吧!

首先,就算是mb_strlen也没法准确的获取多字节字符和单子节字符混合在一起的长度,网上有个说法,汉字占三个字节,英文数组半角符号占一个字节,所以:

_2

用这个方法可以得到单字节占0.5多字节占1的计算。但是以中文为例,只有两万个汉字才是这种情况,还有六万多汉字是四个,其次,emoji也是四个字节。根本无法准确的计算。

好在在无意间发现一个奇怪的东西str_word_count 这个函数计算非英文单词外是除了符号例如中文就是按照汉字个数算的,emoji也是同理。

发现这个以后,咱们就好办了。我们吧用户名中的 [a-aA-Z0-9_] 剔除掉,单独计算不就是我们要的验证长度了吗?

所以,首先我们用:

_3

方式单独计算出单字节字符的显示长度,再用:

_4

方式计算出多字节的长度,最后:

_5

就得出了显示长度,实现了,最后封装成验证规则:

_6

代码是原型代码,还没有进行优化,之后我们只要按照下面的方式用:

_7

现在就很好的解决了这个需求。

我们很乐意,将基于 Laravel 的 ThinkSNS+ 产品开发中的技术解决方案分享给大家,也希望喜欢的朋友能给国内开源产品一点点的支持。

开源代码仓库:

GitHub:https://github.com/zhiyicx/thinksns-plus(点击star,每日关注开发动态。)
官网:http://www.thinksns.com/

目录
相关文章
|
Java Spring
如何通过IDEA查看注解逻辑实现
如何通过IDEA查看注解逻辑实现
1387 0
|
9月前
|
人工智能 自然语言处理 数据处理
《DeepSeek轻量级模型蒸馏技术:知识迁移损失补偿策略全解析》
在人工智能领域,大语言模型虽强大但部署困难,尤其在资源受限设备上。DeepSeek的轻量级模型蒸馏技术通过知识迁移损失补偿策略,有效解决了这一难题。该技术将大型教师模型的知识传递给小型学生模型,通过输出分布、中间特征和梯度匹配等方式最小化性能损失,实现模型轻量化。此外,动态自适应策略如温度调节和课程蒸馏进一步提升了蒸馏效果。实际应用中,轻量级模型在自然语言处理任务中表现出色,大幅降低了计算资源需求,为更广泛的应用场景提供了可能。
410 0
|
Rust 安全 算法
揭秘Rust语言如何重塑区块链安全:打造坚不可摧的分布式账本新篇章!
【8月更文挑战第31天】自比特币诞生以来,区块链技术凭借其去中心化和不可篡改的特点备受关注。为了应对安全性挑战,Rust 语言凭借其内存安全特性逐渐成为区块链开发的优选。本文探讨了 Rust 如何助力区块链实现更安全的分布式账本。通过示例展示了 Rust 在避免内存泄漏、空指针引用及数据竞争等方面的优势,预示着 Rust 在高性能、高安全性需求的区块链应用中拥有广阔前景。
392 2
|
存储 NoSQL Java
mongodb基于地理位置查询实现围栏
mongodb基于地理位置查询实现围栏
1835 0
|
XML 数据格式
mybaties xml 判断集合是否size大于0
在xml文件中用foreach遍历集合
326 0
|
存储 消息中间件 缓存
计算机底层原理概述
计算机底层原理概述
计算机底层原理概述
|
固态存储 计算机视觉
【24】目标检测模型SSD的搭建及其训练与测试
【24】目标检测模型SSD的搭建及其训练与测试
507 0
【24】目标检测模型SSD的搭建及其训练与测试
|
存储 机器学习/深度学习 数据建模
【数据结构】图的存储结构—邻接矩阵
【数据结构】图的存储结构—邻接矩阵
1761 0
【数据结构】图的存储结构—邻接矩阵
|
机器学习/深度学习 数据采集 算法
数据挖掘实战:个人信贷违约预测(上)
大家好,我是东哥。本次分享一个数据挖掘实战项目:个人信贷违约预测,此项目对于想要学习信贷风控模型的同学非常有帮助,数据和源码在文末。
1079 0
数据挖掘实战:个人信贷违约预测(上)
|
存储 NoSQL Unix
【开源项目】C语言开源项目一览
【开源项目】C语言开源项目一览
638 0

热门文章

最新文章