Lua: How to check if a string contains only numbers and letters?

19,468

Solution 1

If you're looking to see if a string contains only alphanumeric characters, then just match the string against all non-alphanumeric characters:

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

The pattern %w matches alphanumeric characters. By convention, a pattern than is upper-case rather than lowercase matches the inverse set of characters. So %W matches all non-alphanumeric characters.

Solution 2

You can create a set match with []

local patt = "[[email protected]]"
if string.match ( mystr , patt ) then
    ....
end

Note that character classes in lua only work for single characters (not words). There are built in classes, %W matches non-alphanumerics, so go ahead and use that as a shortcut.

You can also add the inbuilt classes to your set:

local patt = "[%Wxyz]"

Will match all non-alphanumerics AND characters x, y or z

Share:
19,468

Related videos on Youtube

unwise guy
Author by

unwise guy

Updated on June 11, 2022

Comments

  • unwise guy
    unwise guy 7 months

    Simple question may have a simple answer, but my current solution seems horrible.

    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
    

    Is there a better way to do this.. maybe with string.gsub?

    Thanks in advance.

Related