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