Lua内で、文字列から特定の特殊文字を削除するにはどうすればよいですか?
たとえば、名前の入力は次のようになります。
L@)iAm PAGE
に変更されました Liam Page
José Luis
に変更されました Jose Luis
JACK O'NIEL
に変更されました Jack O'Niel
私は現在持っています
firstName = ipFirstName:gsub('[%p%c%s]', '')
lastName = ipLastName:gsub('[%p%c%s]', '')
しかし、それは広すぎます。
以下は、名前をある程度サニタイズするための簡単な関数です。
local function sanitizeName (name)
local accented = {
['ß'] = 'ss'
, ['à'] = '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'
, ['ü'] = 'ue'
, ['ý'] = 'y', ['ÿ'] = 'y'
, ['þ'] = 'th'
}
local sanitized = name
:lower() -- Bring everything to lower case.
:gsub ('%s+', ' ') -- Normalise whitespaces.
-- Replace some non-ASCII characters:
for fancy, plain in pairs (accented) do
sanitized = sanitized:gsub (fancy, plain)
end
return sanitized
:gsub ("[^%a ']", '') -- Remove everyting but ASCII, spaces and apostrophes.
:gsub ('^%a', string.upper) -- Capitalise the first letter of the first name.
:gsub ("[ ']%a", string.upper) -- Capitalise the first letter of other names.
end
for _, name in ipairs {'L@)iAm PAGE', 'José Luis', "JACK O'NIEL"} do
print (name, sanitizeName (name))
end
ただし、Unicode文字を適切に処理するには、このページを調べてください。また、個人名に関するほとんどの仮定は誤りであることに注意してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加