Lua: Как проверить, содержит ли строка только цифры и буквы?

Простой вопрос может иметь простой ответ, но мое текущее решение кажется ужасным.

local list = {'?', '!', '@', ... etc)
for i=1, #list do 
    if string.match(string, strf("%%%s+", list[i])) then
         -- string contains characters that are not alphanumeric.
    end
 end

Есть ли лучший способ сделать это.. может быть, с string.gsub?

Заранее спасибо.

3 ответа

Решение

Если вы ищете, содержит ли строка только буквенно-цифровые символы, просто сопоставьте строку со всеми не буквенно-цифровыми символами:

if(str:match("%W")) then
  --Improper characters detected.
end

Шаблон %w соответствует буквенно-цифровым символам По соглашению шаблон, а не заглавные, а прописные, соответствует инверсному набору символов. Так %W соответствует всем не буквенно-цифровым символам.

Вы можете создать набор совпадений с []

local patt = "[?!@]"

if string.match ( mystr , patt ) then
    ....
end

Обратите внимание, что классы символов в lua работают только для отдельных символов (не слов). Есть встроенные классы, %W соответствует не буквенно-цифровым, так что используйте его в качестве ярлыка.

Вы также можете добавить встроенные классы в свой набор:

local patt = "[%Wxyz]"

Будет соответствовать всем не алфавитно-цифровым и символам x, y или же z

Я использую этот двухсторонний Lua:

  local function envIsAlphaNum(sIn)
    return (string.match(sIn,"[^%w]") == nil) end

Когда он обнаруживает не буквенно-цифровой, он возвращает ложь

Другие вопросы по тегам