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关注研发动态,感谢大家的支持)

相关文章
|
8月前
字符编码问题之GB2312编码扩充到包括更多汉字和生僻字的如何解决
字符编码问题之GB2312编码扩充到包括更多汉字和生僻字的如何解决
166 0
统计文本中单字母、双字母、三字母的频率
统计文本中单字母、双字母、三字母的频率
166 0
【基础入门题034】统计中文字符数
【基础入门题034】统计中文字符数
123 0
Python经典编程习题100例:第17例:统计字符、数字、其他字符个数
Python经典编程习题100例:第17例:统计字符、数字、其他字符个数
182 0
(JAVA编程练习):输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
(JAVA编程练习):输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
(JAVA编程练习):输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
[Python]统计字符串中数字,字母,汉字的个数
[Python]统计字符串中数字,字母,汉字的个数
一个汉字占几个字节你真的记住了吗?
一个汉字占几个字节是不是不太好记呢,编码不一样则占字节位就不一样。下面用一段简短的代码了解一下一个汉字占几个字节。
434 0
一个汉字占几个字节你真的记住了吗?
一个汉字占多少字节?
原文:一个汉字占多少字节? GBK编码,一个汉字占两个字节。 UTF-16编码,通常汉字占两个字节,CJKV扩展B区、扩展C区、扩展D区中的汉字占四个字节(一般字符的Unicode范围是U+0000至U+FFFF,而这些扩展部分的范围大于U+20000,因而要用两个UTF-16)。
2652 0
Python之每日一练统计英文文本单词出现的个数、行数、字符数
第四题:任一个英文的纯文本文件,统计其中的单词出现的个数。 一、首先获取纯英文的文本,这里以获取“Python之禅”为例,见代码如下 # -*- coding: utf-8 -*- import sys origin = sys.stdout#标准输出 f =open('file.txt', 'w') sys.stdout = f # =================================== print 'Start of program' # 你的程序放到这里,过程中所有print到屏幕的内容都同时保存在file.txt里面了。
3424 0

热门文章

最新文章

下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等