如何从Lua中的字符串中删除某些特殊字符?

如何从Lua中的字符串中删除某些特殊字符?,lua,Lua,在Lua中,如何从字符串中删除特定的特殊字符? 例如,名称输入为: L@)iAm页面更改为Liam页面 Jose Luis更改为Jose Luis JACK O'NIEL更改为JACK O'NIEL 我现在有 firstName = ipFirstName:gsub('[%p%c%s]', '') lastName = ipLastName:gsub('[%p%c%s]', '') 但它太宽泛了。下面是一个简单的函数,用于在一定程度上清除名称: 本地函数sanitizeName(名称) 本

在Lua中,如何从字符串中删除特定的特殊字符?
例如,名称输入为:

  • L@)iAm页面
    更改为
    Liam页面
  • Jose Luis
    更改为
    Jose Luis
  • JACK O'NIEL
    更改为
    JACK O'NIEL
我现在有

firstName = ipFirstName:gsub('[%p%c%s]', '')
lastName = ipLastName:gsub('[%p%c%s]', '')

但它太宽泛了。

下面是一个简单的函数,用于在一定程度上清除名称:

本地函数sanitizeName(名称)
本地口音={
[“ß”]=“ss”
,['a']='a',['a']='a',['–']='a',['ã']='a',['å']='a'
,[‘ä’]=‘ae’,[‘æ’]=‘ae’
,[‘ç’]=“c”
,['è']='e',['è']='e',['è']='e',['ë']='e'
,[‘ì’]=‘i’,[‘í’]=‘i’,[‘î’]=‘i’,[‘ï’]=‘i’
,[“ð”]=“dh”
,['ñ']='n'
,[‘ò’]=‘o’、[‘ó’]=‘o’、[‘ô’]=‘o’、[‘ô’]=‘o’、[‘ô’]=‘o’
,['ö']='oe'
,[‘ù’]=‘u’,[‘ú’]=‘u’,[‘ú’]=‘u’
,['u']='ue'
,[“ý”]=“y”,[“ÿ”]=“y”
,[“þ”]=“th”
}
本地已消毒=名称
:lower()--将所有内容放入小写。
:gsub(“%s+”,“”)——规范化空白。
--替换一些非ASCII字符:
对于花式,两人一组(带重音)做
消毒=消毒:gsub(花式、普通)
结束
退货消毒
:gsub(“[^%a']”,“”)——删除除ASCII、空格和撇号以外的所有字符。
:gsub('^%a',string.upper)--将名字的第一个字母大写。
:gsub(“[']%a”,string.upper)--将其他名称的第一个字母大写。
结束
至于"我的名字","何塞·路易斯","杰克·奥尼尔"多
印刷品(名称,消毒液名称(名称))
结束

但是,要正确处理Unicode字符,请进行研究。还要注意的是,大多数关于人名的假设都是错误的。

你的问题似乎不仅仅是关于特殊字符,因为你的名字也是“头衔大小写”。典型地,特殊的字符部分就像你做的那样是一个搜索/替换,但是从一个字符到另一个字符有一个大的对应表。一步一步地做:1°)列出丢失的示例(也可以考虑i18n字符串,如“ç”、“ä”等。2°)列出禁止的字符(“@”和“/”等)。3°)列出确定字符(a->z+引号?)4°)列出特殊规则-例如“无连续引号”),等等。