ThinkSNS特有需求之--英文字符占 0.5 个,中文字符占 1 个

简介:

ThinkSNS后端框架使用laravel,每周和 laravel master 保持同步,而后台和 html 5 则采用 vue 开发。语言特性方面,采用 php 7 的严格模式。
言归正传,之所以写继篇,其实是来检讨的,上一次发表了《ThinkSNS+ 如何计算字符显示长度》后,有网友几经测试后告知str_word_count 有问题。

根据ThinkSNS+ 的进度安排,最近在研发支付功能,所以只能使用周末的时间做了一个兼容性更好的计算方法。

需求

重新说下需求:在我天朝 PM 经常会提一种要求,就是例如一个用户名最多输入12个汉字,但是英文可以输入24个,混排也要满足这个规则。

简言之:单字节字符占0.5,多字节字符占1字节。

解决

闲下来的时候看了上篇文章中的算法,其实是没什么问题的,只是兼容性不够好,而且写那个方法时想得过于复杂

也不知道当时脑袋里面都想啥了

我们看上一篇中计算多字节的方法:
_1

计算方法是剔除我们需求中允许的单字节,然后通过 str word count 来获取多字节的个数,其实这个函数是可以获取到的,但是部分系统下是不会成功的。还有一个函数就可以直接获取多字节的个数 mb strlen 修改后如下:
_2

然后我们就可以正确完成这个需求了,最终实现的 Laravel 验证规则如下:_3

Laravel 通过上面的规则,可以在表单验证规则中直接验证,还支持传入最小值和最大值。

上面的代码都是来自于基于 Laravel 开发的开源程序 ThinkSNS+ 中,ThinkSNS+ 采用 apache-2.0 协议开源,我相信可以作为很多 Laravel 学习者的学习程序之一。

项目地址:GitHub: https://github.com/zhiyicx/thinksns-plus
(点击star关注研发动态,感谢大家的支持)

目录
相关文章
|
29天前
|
存储
ABAP 系统中一个字符到底占据几个字节存储空间
ABAP 系统中一个字符到底占据几个字节存储空间
18 1
|
2月前
|
API Python
对于超过5000字符的文本,建议使用批量翻译接口
对于超过5000字符的文本,建议使用批量翻译接口
12 4
|
7月前
|
C#
C#小知识之中英文转换、去空格
# 一、中英文转换 ## 1、安装NPinYin ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231031-1f77b9b6.png?x-cos-security-token=kcWkaWALSQ5t0gKzZRkVwYOOBJMLQ8Ra8df6748cc017b8b22443671efb8aed172ct0qMmH-Si3jPfLmVc91udBHTdfdp2n1Qk-hBfLRQF5l22U2cHOMKfU7b0bWfl1t
68 0
C#小知识之中英文转换、去空格
|
8月前
|
XML 存储 安全
Unicode 15.0 标准已发布,新增鹅、豌豆等 20个emoji
Unicode 15.0 标准已发布,新增鹅、豌豆等 20个emoji
251 0
【斗鱼笔试题】字符串分类---字符集相同的字符串为同一类
【斗鱼笔试题】字符串分类---字符集相同的字符串为同一类
58 0
|
Dart
编码用这16个命名规则能让你少写一半以上的注释!
我们经常为写注释而烦恼,觉得写注释有点浪费时间。实际上,如果用好了代码命名,可以节省很多写注释的时间。
206 0
编码用这16个命名规则能让你少写一半以上的注释!
微信默认表情符号的代码对照表
在微信用户可以发送表情符号,如下图: 这些符号公众平台是将其处理成文本,下面就列出微信默认表情符号代码对照表: 表情图片 字符串代码 替换关键字 /::) 微笑 /::~ 伤心 /::B 美女 /::| 发呆 /:8-) 墨镜 ...
2278 0
全网首发:神奇的WORD文字渲染效果,18个字符一组,每个字符渲染效果不同
全网首发:神奇的WORD文字渲染效果,18个字符一组,每个字符渲染效果不同
213 0
全网首发:神奇的WORD文字渲染效果,18个字符一组,每个字符渲染效果不同