ThinkSNS特有需求之--英文字符占 0.5 個,中文字符占 1 個
ThinkSNS後端框架使用laravel,每周和 laravel master 保持同步,而後台和 html 5 則采用 vue 開發。語言特性方麵,采用 php 7 的嚴格模式。
言歸正傳,之所以寫繼篇,其實是來檢討的,上一次發表了《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關注研發動態,感謝大家的支持)
最後更新:2017-10-12 17:33:15