---@class oxstring : stringlib lib.string = string local string_char = string.char local math_random = math.random local function getLetter() return string_char(math_random(65, 90)) end local function getLowerLetter() return string_char(math_random(97, 122)) end local function getInt() return math_random(0, 9) end local function getAlphanumeric() return math_random(0, 1) == 1 and getLetter() or getInt() end local formatChar = { ['1'] = getInt, ['A'] = getLetter, ['a'] = getLowerLetter, ['.'] = getAlphanumeric, } ---Creates a random string based on a given pattern. ---`1` will output a random number from 0-9. ---`A` will output a random letter from A-Z. ---`a` will output a random letter from a-z. ---`.` will output a random letter or number. ---`^` will output the following character literally. ---Any other character will output said character. ---@param pattern string ---@param length? integer Sets the length of the returned string, either padding it or omitting characters. ---@return string function string.random(pattern, length) local len = length or #pattern:gsub('%^', '') local arr = table.create(len, 0) local size = 0 local i = 0 while size < len do i += 1 ---@type string | integer local char = pattern:sub(i, i) if char == '' then arr[size + 1] = string.rep(' ', len - size) break elseif char == '^' then i += 1 char = pattern:sub(i, i) else local fn = formatChar[char] char = fn and fn() or char end size += 1 arr[size] = char end return table.concat(arr) end return lib.string