你问题的中心点是:你的问题的巅峰是
前 8 个字符不相同
正如所建议的,这可以通过 Lua 模式(类似于正则表达式)来完成。如果您想检查前 8 个字符是否都相同,您可以使用
function validate1st8NotSame(value)
if value:match("^(.)%1%1%1%1%1%1%1") then
return false
end
return true
end
print(validate1st8NotSame("aaaaaaaa")) --not valid
print(validate1st8NotSame("aaaaaaab")) --valid
print(validate1st8NotSame("aaaaaaa")) --!?
该模式的工作原理如下:
^(.)
捕获位置 1 的角色,
%1%1%1%1%1%1%1
使用%1
对它的反向引用来检查捕获重复 8 次。
如果您真的想检查前 8 个字符是否不包含相同的字符,则需要更复杂的模式:
function validate1st8NoSame(value)
if value:sub(1,8):match("(.).-%1") then
return false
end
return true
end
print(validate1st8NoSame("abcdefghe")) --valid
print(validate1st8NoSame("abcdefgae")) --invalid
这里的想法是:
value:sub(1,8)
获取前 8 个字符
(.)
捕获单个字符
.-
匹配任何字符的 0 次或多次重复的最短可能序列;
%1
对捕获的字符的反向引用
以下应用相同逻辑的正则表达式演示希望更具体。
示例代码