66 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| --[[
 | |
|     https://github.com/overextended/ox_lib
 | |
| 
 | |
|     This file is licensed under LGPL-3.0 or higher <https://www.gnu.org/licenses/lgpl-3.0.en.html>
 | |
| 
 | |
|     Copyright © 2025 Linden <https://github.com/thelindat>
 | |
| ]]
 | |
| 
 | |
| ---@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
 | 
