解析社群系统 ThinkSNS+ 中利用 Laravel 表单验证来验证用户名的方法
2017-06-20 15:11
531 查看
什么是ThinkSNS+ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+。后端框架使用laravel,每周和 laravel master 保持同步,而后台和 html 5 则采用 vue 开发。语言特性方面,采用 php 7 的严格模式。
![](https://img-blog.csdn.net/20170620150958969?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVGhpbmtTTlNf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
言归正传,之所以写继篇,其实是来检讨的,上一次发表了《ThinkSNS+ 如何计算字符显示长度》后,有网友几经测试后告知str_word_count 有问题。根据ThinkSNS+ 的进度安排,最近在研发支付功能,所以只能使用周末的时间做了一个兼容性更好的计算方法。需求重新说下需求:在我天朝 PM 经常会提一种要求,就是例如一个用户名最多输入12个汉字,但是英文可以输入24个,混排也要满足这个规则。简言之:单字节字符占0.5,多字节字符占1字节。解决闲下来的时候看了上篇文章中的算法,其实是没什么问题的,只是兼容性不够好,而且写那个方法时想得过于复杂也不知道当时脑袋里面都想啥了我们看上一篇中计算多字节的方法:
![](https://img-blog.csdn.net/20170620151020079?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVGhpbmtTTlNf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
计算方法是剔除我们需求中允许的单字节,然后通过 str word count 来获取多字节的个数,其实这个函数是可以获取到的,但是部分系统下是不会成功的。还有一个函数就可以直接获取多字节的个数 mb strlen 修改后如下:
![](https://img-blog.csdn.net/20170620151030485?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVGhpbmtTTlNf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
然后我们就可以正确完成这个需求了,最终实现的 Laravel 验证规则如下:
![](https://img-blog.csdn.net/20170620151141364?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVGhpbmtTTlNf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Laravel 通过上面的规则,可以在表单验证规则中直接验证,还支持传入最小值和最大值。上面的代码都是来自于基于 Laravel 开发的开源程序 ThinkSNS+ 中,ThinkSNS+ 采用 apache-2.0 协议开源,我相信可以作为很多 Laravel 学习者的学习程序之一。项目地址:GitHub: https://github.com/zhiyicx/thinksns-plus(点击star关注研发动态,感谢大家的支持)ThinkSNS官网:http://thinksns.com/内测申请方式提供个人/企业联系方式及认证信息(实名ID/企业营业执照照片或扫描件)及申请说明,发送邮件至lihecong@zhishisoft.com即可获得内测资格,申请从速。欢迎各位关注者通过邮件,以图+文的形式发送至官方邮箱lihecong@zhishisoft.com反馈发现的问题,备注机型及系统版本。
言归正传,之所以写继篇,其实是来检讨的,上一次发表了《ThinkSNS+ 如何计算字符显示长度》后,有网友几经测试后告知str_word_count 有问题。根据ThinkSNS+ 的进度安排,最近在研发支付功能,所以只能使用周末的时间做了一个兼容性更好的计算方法。需求重新说下需求:在我天朝 PM 经常会提一种要求,就是例如一个用户名最多输入12个汉字,但是英文可以输入24个,混排也要满足这个规则。简言之:单字节字符占0.5,多字节字符占1字节。解决闲下来的时候看了上篇文章中的算法,其实是没什么问题的,只是兼容性不够好,而且写那个方法时想得过于复杂也不知道当时脑袋里面都想啥了我们看上一篇中计算多字节的方法:
计算方法是剔除我们需求中允许的单字节,然后通过 str word count 来获取多字节的个数,其实这个函数是可以获取到的,但是部分系统下是不会成功的。还有一个函数就可以直接获取多字节的个数 mb strlen 修改后如下:
然后我们就可以正确完成这个需求了,最终实现的 Laravel 验证规则如下:
Laravel 通过上面的规则,可以在表单验证规则中直接验证,还支持传入最小值和最大值。上面的代码都是来自于基于 Laravel 开发的开源程序 ThinkSNS+ 中,ThinkSNS+ 采用 apache-2.0 协议开源,我相信可以作为很多 Laravel 学习者的学习程序之一。项目地址:GitHub: https://github.com/zhiyicx/thinksns-plus(点击star关注研发动态,感谢大家的支持)ThinkSNS官网:http://thinksns.com/内测申请方式提供个人/企业联系方式及认证信息(实名ID/企业营业执照照片或扫描件)及申请说明,发送邮件至lihecong@zhishisoft.com即可获得内测资格,申请从速。欢迎各位关注者通过邮件,以图+文的形式发送至官方邮箱lihecong@zhishisoft.com反馈发现的问题,备注机型及系统版本。
相关文章推荐
- 利用JS提交表单的几种方法和验证
- Laravel中使用FormRequest进行表单验证方法及问题汇总
- 利用JS提交表单的几种方法和验证
- 【社交系统ThinkSNS+研发日记】Laravel Model 利用 Macroable 为数据模型添加宏能
- layui 表单验证旧密码是否输入正确(验证用户名是否被使用,也可以用这种方法)
- 利用JS提交表单的几种方法和验证
- 基于 Laravel 开发 社群系统ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记
- 利用JS提交表单的几种方法和验证
- 利用JS提交表单的几种方法和验证
- Laravel中使用FormRequest进行表单验证方法及问题汇总
- 利用JS提交表单的几种方法和验证(必看篇)
- jquery.validate表单验证插件使用方法解析
- layui 表单验证旧密码是否输入正确(验证用户名是否被使用,也可以用这种方法)
- 利用JS提交表单的几种方法和验证(必看篇)
- 利用JS提交表单的几种方法和验证
- 利用js进行表单验证:判断用户名和密码非空
- 利用ngModel相关属性及方法自定义表单验证指令
- 【社交系统ThinkSNS研发日记十二】Laravel Model 利用 Macroable 为数据模型添加宏能力
- 解析网站发布系统利用ASP生成静态页面的方法
- Ajax+asp.net无刷新验证用户名的几种方法