当前位置: 首页 > news >正文

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

相关文章:

  • Java 加密解密基础
  • HTML5边玩边学(9):俄罗斯方块就是这么简单 之 数据模型篇
  • PAT (Advanced Level) 1045. Favorite Color Stripe (30)
  • Web安全实践(15)CSRF(跨站请求伪造)-从校内的插入图片说起
  • CCAction
  • Wireshark漫谈(一)
  • 手写数字识别的几种实现方法
  • POJ1015 Jury Compromise(DP)
  • React 的慢与快:优化 React 应用实战
  • required 引发的小小思考
  • Python cos() 函数
  • [数据结构] 冒泡排序
  • NIPT无创产前分析思路
  • xshell、putty远程连接
  • 利用GitHub Pages和Hexo搭建个人博客
  • android 一些 utils
  • ERLANG 网工修炼笔记 ---- UDP
  • Javascripit类型转换比较那点事儿,双等号(==)
  • js算法-归并排序(merge_sort)
  • Making An Indicator With Pure CSS
  • mockjs让前端开发独立于后端
  • MySQL-事务管理(基础)
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Shell编程
  • vue学习系列(二)vue-cli
  • 阿里云应用高可用服务公测发布
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 笨办法学C 练习34:动态数组
  • 技术:超级实用的电脑小技巧
  • 为什么要用IPython/Jupyter?
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ​io --- 处理流的核心工具​
  • ​secrets --- 生成管理密码的安全随机数​
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​批处理文件中的errorlevel用法
  • #宝哥教你#查看jquery绑定的事件函数
  • #微信小程序:微信小程序常见的配置传值
  • (补)B+树一些思想
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (生成器)yield与(迭代器)generator
  • (转)fock函数详解
  • .chm格式文件如何阅读
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .Net中的设计模式——Factory Method模式
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [30期] 我的学习方法