閱讀830 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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關注研發動態,感謝大家的支持)

最後更新:2017-10-12 17:33:15

  上一篇:go 雲棲大會 我們一刻都不敢懈怠 西湖消防衛士吹響十九大安保前哨戰
  下一篇:go  First Doc