摘要:今天我們來聊一下可能很多人都會頭疼的東西顯示長度。需求是這樣的,在字符的顯示上,兩個英文單詞才占一個中文或者其他語言的顯示長度。好在在無意間發(fā)現(xiàn)一個奇怪的東西這個函數(shù)計算非英文單詞外是除了符號例如中文就是按照漢字個數(shù)算的,也是同理。
今天我們來聊一下可能很多人都會頭疼的東西:顯示長度。
需求是這樣的,在字符的顯示上,兩個英文單詞才占一個中文或者其他語言的顯示長度。如下:
上面排的是兩個英文字母,一個漢字,一個Emoji。你會發(fā)現(xiàn),在顯示上占的寬度是一致的。一些設(shè)計上為了好看也要求有這樣的處理。
例如,我們的用戶名需求是最多12個非單字節(jié)字符或者24個單字節(jié)字符的需求也可以混合排的需求,我們寫后端不得不處理這樣的驗證了。
需求規(guī)則是 /^a-zA-Z_x7f-xff*$/
在ThinkSNS+中,為了能把這部分驗證公用,所以選擇使用自定義驗證規(guī)則。我們先說下計算的實(shí)現(xiàn)思路吧!
首先,就算是mb_strlen也沒法準(zhǔn)確的獲取多字節(jié)字符和單子節(jié)字符混合在一起的長度,網(wǎng)上有個說法,漢字占三個字節(jié),英文數(shù)組半角符號占一個字節(jié),所以:
用這個方法可以得到單字節(jié)占0.5多字節(jié)占1的計算。但是以中文為例,只有兩萬個漢字才是這種情況,還有六萬多漢字是四個,其次,emoji也是四個字節(jié)。根本無法準(zhǔn)確的計算。
好在在無意間發(fā)現(xiàn)一個奇怪的東西str_word_count 這個函數(shù)計算非英文單詞外是除了符號例如中文就是按照漢字個數(shù)算的,emoji也是同理。
發(fā)現(xiàn)這個以后,咱們就好辦了。我們吧用戶名中的 [a-aA-Z0-9_] 剔除掉,多帶帶計算不就是我們要的驗證長度了嗎?
所以,首先我們用:
方式多帶帶計算出單字節(jié)字符的顯示長度,再用:
方式計算出多字節(jié)的長度,最后:
就得出了顯示長度,實(shí)現(xiàn)了,最后封裝成驗證規(guī)則:
代碼是原型代碼,還沒有進(jìn)行優(yōu)化,之后我們只要按照下面的方式用:
現(xiàn)在就很好的解決了這個需求。
我們很樂意,將基于 Laravel 的 ThinkSNS+ 產(chǎn)品開發(fā)中的技術(shù)解決方案分享給大家,也希望喜歡的朋友能給國內(nèi)開源產(chǎn)品一點(diǎn)點(diǎn)的支持。
開源代碼倉庫GitHub:https://github.com/zhiyicx/thinksns-plus(點(diǎn)擊star,每日關(guān)注開發(fā)動態(tài)。)
官網(wǎng):http://www.thinksns.com/
內(nèi)測申請方式提供個人/企業(yè)聯(lián)系方式及認(rèn)證信息(真實(shí)姓名 /企業(yè)營業(yè)執(zhí)照照片或掃描件)及申請說明,發(fā)送郵件至lihecong@zhishisoft.com將有機(jī)會獲得首批內(nèi)測資格,名額有限,申請從速。
開源不易,為了爭取開源,我們團(tuán)隊做了很多努力。把基于Laravel的作品展示在大家面前,之后專欄會持續(xù)不斷的分享ThinkSNS +開發(fā)過程中的技術(shù)細(xì)節(jié)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/23074.html
摘要:本文主要全面講解在不適用第三方包的情況下,如何在基于框架上,研發(fā)社交系統(tǒng)時,簡歷一套優(yōu)雅而不失性價比的用戶權(quán)限管理體系功能,內(nèi)含真實(shí)代碼。需求場景就是用戶組權(quán)限節(jié)點(diǎn),這個需求有很多很好的第三方包實(shí)現(xiàn)。但是已經(jīng)足以勝任用戶組權(quán)限判斷邏輯了。 本文主要全面講解在不適用第三方包的情況下,如何在基于Laravel框架上,研發(fā)社交系統(tǒng)ThinkSNS+時,簡歷一套優(yōu)雅而不失性價比的用戶權(quán)限管理體...
摘要:在社交系統(tǒng)中有這樣一個命令主要是用作包的安裝,升級,卸載。這在開發(fā)過程中很有用。內(nèi)測申請方式提供個人企業(yè)聯(lián)系方式及認(rèn)證信息實(shí)名企業(yè)營業(yè)執(zhí)照照片或掃描件及申請說明,發(fā)送郵件至將有機(jī)會獲得首批內(nèi)測資格,名額有限,申請從速。 在前面,我介紹了拓展類型,分別有 plus-compnent 和 plus-plugin 兩個,這里重點(diǎn)講以下如何實(shí)現(xiàn) plus-component 的。 plus-c...
摘要:需求場景發(fā)送驗證碼或者消息通知,可發(fā)送到手機(jī)或郵箱中。完成首先,在中的規(guī)范就是使用的消息通知,這里基于場景為驗證碼。所以我們在驗證碼模型中添加是完全符合通知的正確使用的。 順便發(fā)個小通知:7月15日ThinkSNS+開源版發(fā)布,同時非開源的APP也走出內(nèi)測階段,體驗二維碼也全面發(fā)布體驗。 什么是ThinkSNS ? ThinkSNS(簡稱TS),一款全平臺綜合性社交系統(tǒng),為國內(nèi)外大中小...
閱讀 3173·2021-11-24 09:39
閱讀 3769·2021-11-22 13:54
閱讀 3554·2021-11-16 11:45
閱讀 2629·2021-09-09 09:33
閱讀 3348·2019-08-30 15:55
閱讀 1425·2019-08-29 15:40
閱讀 1059·2019-08-29 15:19
閱讀 3557·2019-08-29 15:14