Merge pull request #1630 from YOMAN1792/dev

Refactor name validation: remove numeric check and simplify character validation
This commit is contained in:
zykem
2025-05-09 11:12:47 +02:00
committed by GitHub
3 changed files with 84 additions and 9 deletions
@@ -39,6 +39,14 @@ Config.AdminGroups = {
["admin"] = true,
}
Config.ValidCharacterSets = { -- Only enable additional charsets if your server is multilingual. By default everything is false.
['el'] = false, -- Greek
['sr'] = false, -- Cyrillic
['he'] = false, -- Hebrew
['ar'] = false, -- Arabic
['zh-cn'] = false -- Chinese, Japanese, Korean
}
Config.EnablePaycheck = true -- enable paycheck
Config.LogPaycheck = false -- Logs paychecks to a nominated Discord channel via webhook (default is false)
Config.EnableSocietyPayouts = false -- pay from the society account that the player is employed at? Requirement: esx_society
+75
View File
@@ -210,3 +210,78 @@ function ESX.Await(conditionFunc, errorMessage, timeoutMs)
return false
end
---@param str string
---@param allowDigits boolean? Allow numbers if necessary
---@return boolean
function ESX.IsValidLocaleString(str, allowDigits)
if not ESX.ValidateType(str, 'string') then
return false
end
local locale = string.lower(Config.Locale)
local defaultRanges ={
{0x0041, 0x005A}, -- Basic Latin uppercase
{0x0061, 0x007A}, -- Basic Latin lowercase
{0x0020, 0x0020}, -- Space
{0x002D, 0x002D}, -- Dash
{0x00C0, 0x02AF} -- Latin Extended
}
if allowDigits then
defaultRanges[#defaultRanges + 1] = {0x0030, 0x0039} -- 0-9 Numbers
end
local localeRanges = {
["el"] = { {0x0370, 0x03FF} }, -- Greek
["sr"] ={ {0x0400, 0x04FF} }, -- Cyrillic
["he"] ={ {0x05D0, 0x05EA} }, -- Hebrew letters
["ar"] = {
{0x0620, 0x063F}, -- Arabic
{0x0641, 0x064A},
{0x066E, 0x066F},
{0x0671, 0x06D3},
{0x06D5, 0x06D5},
{0x0750, 0x077F},
{0x08A0, 0x08BD}
},
["zh-cn"] ={ {0x4E00, 0x9FFF} } -- CJK
}
local validRanges = { table.unpack(defaultRanges) }
if localeRanges[locale] then
for i = 1, #localeRanges[locale] do
validRanges[#validRanges + 1] = localeRanges[locale][i]
end
end
if Config.ValidCharacterSets then
for charset, enabled in pairs(Config.ValidCharacterSets) do
if enabled and charset ~= locale and localeRanges[charset] then
for i = 1, #localeRanges[charset] do
validRanges[#validRanges + 1] = localeRanges[charset][i]
end
end
end
end
for _, code in utf8.codes(str) do
local isValid = false
for i = 1, #validRanges do
local range = validRanges[i]
if code >= range[1] and code <= range[2] then
isValid = true
break
end
end
if not isValid then
return false
end
end
return true
end
+1 -9
View File
@@ -84,16 +84,8 @@ local function formatDate(str)
return date
end
local function checkAlphanumeric(str)
return (string.match(str, "%W"))
end
local function checkForNumbers(str)
return (string.match(str, "%d"))
end
local function checkNameFormat(name)
if not checkAlphanumeric(name) and not checkForNumbers(name) then
if ESX.IsValidLocaleString(name) then
local stringLength = string.len(name)
return stringLength > 0 and stringLength < Config.MaxNameLength
end