在做 遊戲 使用者註冊時 使用者名稱要求:只能全是英文本母 或者 只能是漢字
這個時候出現乙個問題 漢字該怎麼檢查呢
local str1 = "發燒發的撒地方"
if str1:match("^[\128-\254]+$") then
print("-----------ok2")
else
print("-------------not ok2")
end從網上找了上述方法 你以為它正確嗎?
好吧 也正確但是還是會有特殊符號混入進去的 比如 漢字 下的 標點符號 這些顯然是不可靠的
在乙個lua的qq群問了一下 沒人回答(平時挺熱鬧的 今天不知道怎麼了 看來我人品也有點兒問題 呵呵) 在quick-x 1 和2 qq群我問了一下
乙個qq名 」少年:「 的大神 說:「 你要吧字串拆了 按utf8編碼拆了」 然後他貼出了一些方法:見下,
function string.utf8find(input,patter)
local len = string.len(input)
local left = len
local arr =
local tb = {}
local tb2 = {}
--拆源
while left ~= 0 do
local tmp = string.byte(input, -left)
local i = #arr
while arr[i] do
if tmp >= arr[i] then
left = left - i
break
endi = i - 1
endif i == 1 then
tb[#tb+1] = string.char(tmp)
else
tb[#tb+1] = string.sub(input,len-left-i +1,len-left)
endend
len = string.len(patter)
left = len
--拆子
while left ~= 0 do
local tmp = string.byte(patter, -left)
local i = #arr
while arr[i] do
if tmp >= arr[i] then
left = left - i
break
endi = i - 1
endif i == 1 then
tb2[#tb2+1] = string.char(tmp)
else
tb2[#tb2+1] = string.sub(patter,len-left-i +1,len-left)
endend
local tlen1 = #tb
local tlen2 = #tb2
local index1 = 1
local index2 = 1
local matchnum = 0
for i = 1, tlen1 do
--源字串的首字元
local c1 = tb[i]
if c1 == tb2[1] then
index1 = i
matchnum = 1
for j = 2,tlen2 do
if tb[index1+j-1] == tb2[j] then
matchnum = matchnum + 1
index1 = index1 + 1
else
break
endend
if matchnum == tlen2 then
return true
endend
endreturn false
end當然還有乙個大神 「喵一哈」 說:「關鍵是分字,把中文分出來」 給了我**:
還有 很多大神和同學的幫忙 不是重點不寫了 在此表示 感謝
上面的方法 和 **中的方法 我還沒有來得及 驗證 但是 光看方法 就有很多可取和學習的 地方 在此記錄下 趕快搬磚 走起,,,
程式設計中有時候需要用到匹配中文的正則,一般用 [ \u4e00-\u9fa5]+ 即可搞定。不過這正則對一般的火星文鳥語就不太適用了,甚至全形的標點符號都不包含在內。例如遊戲裡面的玩家名,普通青年一般都是漢字,文藝青年會加幾個特殊字元,2b青年火星文鳥語都會用上;這時候你就需要更強大的正則了。 其實,遊戲內大部分的玩家名都取自:中日韓統一表意文字(cjk unified ideographs),外加一些特殊的字元;用 [ \u2e80-\ufe4f]+基本都涵蓋了 。
字串轉utf8編碼
url字串中存在中文,需要把中文轉換成utf8編碼,我所知道的四種方法 uri.escapeuristring uri.escapedatastring httputility.urlencode,www.escapeurl httputility.urlencode存在system.web中,需要...
Lua處理UTF8字串
專案裡遇到用string.sub擷取中文字串會擷取出來非空,但是無法展示的情況,進行utf字串處理後ok.核心部分是utf字串的判斷 utf 8 字元處理 local function stringtotable s local tb utf8的編碼規則 1.字元的第乙個位元組範圍 0x00 0x7...
擷取處理UTF 8編碼字串
擷取處理utf 8編碼字串 規則 中文2個字元,數字 英文1個字元 擷取末尾不足乙個漢字的則捨棄。param string str param int len 截取出的字元長度 author flyer0126 since 2012 05 03 function substr utf8 cn str...