米斯特利亚Wiki正在建设中,本WIKI编辑权限开放!欢迎参与~!
全站通知:
模块:Utils
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:Utils/doc创建
local p = {}
-- 是否有中文
function p.hasChinese(str)
return type(str) == 'string' and string.match(str, "[\228-\233][\128-\191][\128-\191]") ~= nil
end
-- 清理标点符号后的空格
function p.cleanPunctuation(str)
if not str then return str end
str = string.gsub(str, ", ", ",")
str = string.gsub(str, "。 ", "。")
str = string.gsub(str, ": ", ":")
str = string.gsub(str, "! ", "!")
str = string.gsub(str, "? ", "?")
str = string.gsub(str, "... ", "……")
return str
end
-- 内部辅助函数:将逗号分隔的字符串转为列表,并清理空白
function p.splitStringToList(str)
local list = {}
if type(str) ~= "string" or str == "" then return list end
-- 同时支持英文逗号和中文逗号
for part in str:gmatch("[^,,]+") do
local trimmed_part = part:gsub("^%s+", ""):gsub("%s+$", "")
if trimmed_part ~= "" then
table.insert(list, trimmed_part)
end
end
return list
end
-- 判断 table 是否为数组(仅 1..#t 连续整数键)
function p.isArray(t)
if type(t) ~= "table" then return false end
local n = 0
for k, _ in pairs(t) do
if type(k) ~= "number" or k <= 0 or k % 1 ~= 0 then
return false
end
n = n + 1
end
return n == #t
end
-- 查找元素在数组中的索引(从1开始)
-- 参数:arr - 要查询的数组,value - 要查找的元素
-- 返回:元素所在索引(存在)或 -1(不存在)
function p.indexOfArray(arr, value)
-- 遍历数组(ipairs适合连续数字索引的数组)
for i, v in ipairs(arr) do
-- 比较元素是否相等
if v == value then
return i -- 找到则返回当前索引
end
end
-- 遍历结束仍未找到,返回-1
return nil
end
--去字符串的前后空格
function p.trim(s)
if type(s) ~= 'string' then return s end
return s:gsub('^%s+', ''):gsub('%s+$', '')
end
-- 按指定分隔符切分字符为数组,并为每个元素去掉前后空格
function p.split(s, delimiter)
-- 处理空值或非字符串输入
if not s or type(s) ~= "string" then
return {} -- 返回空数组
end
-- 处理空字符串
if s:gsub("%s+", "") == "" then
return {} -- 全是空格也视为空输入
end
-- 默认使用逗号作为分隔符
delimiter = delimiter or ","
-- 对于点号等特殊字符,需要转义
-- 创建一个更可靠的字符串分割实现
local result = {}
local start = 1
-- 遍历字符串,查找分隔符并分割
while true do
local pos = string.find(s, delimiter, start, true)
if not pos then
-- 没有找到更多分隔符,添加最后一个部分
local part = string.sub(s, start)
part = p.trim(part)
if part ~= "" then
table.insert(result, part)
end
break
else
-- 找到分隔符,添加当前部分
local part = string.sub(s, start, pos - 1)
part = p.trim(part)
if part ~= "" then
table.insert(result, part)
end
start = pos + #delimiter
end
end
return result
end
-- 根据arg在t查找映射,返回映射组成的字符串
function p.mapST2table(t,arg)
if arg ~= "" and type(arg) == "string" then
return t[arg] or arg
end
if type(arg) == 'table' then
local out = {}
for i, v in ipairs(arg) do
local mapStr = t[v] or v
if mapStr ~= "" then
out[i] = mapStr
end
end
return table.concat(out, ",")
end
return nil
end
function p.hours(hourTable)
local begin = hourTable[1] .. ":00"
local finish = hourTable[2]
if finish > 24 then
finish = finish - 24
finish = "次日"..finish
end
finish = finish..":00"
return begin.."-"..finish
end
-- 自测代码:测试split函数功能
-- 1. 测试默认逗号分隔
-- mw.log("测试1: 默认逗号分隔")
-- local result1 = p.split("apple,banana,orange")
-- mw.logObject(result1)
-- -- 2. 测试自定义分隔符(点号)
-- mw.log("测试2: 自定义分隔符(点号)")
-- local result2 = p.split("apple.banana.orange", ".")
-- mw.logObject(result2)
-- -- 3. 测试带空格的输入
-- mw.log("测试3: 带空格的输入")
-- local result3 = p.split(" apple , banana , orange ")
-- mw.logObject(result3)
-- -- 4. 测试点号分隔带空格
-- mw.log("测试4: 点号分隔带空格")
-- local result4 = p.split(" value . bin ", ".")
-- mw.logObject(result4)
-- -- 5. 测试空输入
-- mw.log("测试5: 空输入")
-- local result5 = p.split("")
-- mw.logObject(result5)
-- -- 6. 测试只有空格的输入
-- mw.log("测试6: 只有空格的输入")
-- local result6 = p.split(" ")
-- mw.logObject(result6)
return p