lua正则表达式如何匹配中文

 1 function CheckChinese(s) 
 2     local ret = {};
 3     local f = '[%z\1-\127\194-\244][\128-\191]*';
 4     local line, lastLine, isBreak = '', false, false;
 5     for v in s:gfind(f) do
 6         table.insert(ret, {c=v,isChinese=(#v~=1)});
 7     end
 8     return ret;
 9 end
10 for k, v in ipairs(CheckChinese('a中文b+')) do 
11     print(k,v.c,#v.c,v.isChinese);
12 end
13 -------------------
14 1    a    1    false
15 23    true
16 33    true
17 4    b    1    false
18 5    +    1    false

贴一段匹配中英文混合输入的代码

 1 function dlg:onBtnOKClick()
 2     local input = self:getInputNewContent()
 3     if input == "" then 
 4         flytip("输入不能为空")
 5         return
 6     end
 7     if self.pattern then
 8         if self.isContainChinese then
 9             local charCount = 0
10             for i, v in ipairs(self:CheckChinese(input)) do 
11                 if v.isChinese then
12                     charCount = charCount + 2
13                 else
14                     charCount = charCount + 1
15                     if string.find(v.c, self.pattern) == nil then
16                         flytip("抱歉,您输入的内容含有非法字符或屏蔽词,请重新输入。")
17                         return
18                     end
19                 end
20             end
21             if self.characterLimit then
22                 if charCount > self.characterLimit then
23                     flytip("抱歉,您输入的字符长度有误,请重新输入。")
24                     return
25                 end
26             end
27         else 
28             if string.find(input, self.pattern) == nil then
29                 flytip("抱歉,您输入的内容含有非法字符或屏蔽词,请重新输入。")
30                 return
31             end
32         end
33     end
34     
35     self:Hide()
36     if self._onOK then
37         self._onOK()
38     end
39 end

 

posted @ 2017-08-25 17:04  AaronBlogs  阅读(7733)  评论(0编辑  收藏  举报