lua指定规则匹配字符

本文介绍了一种用于验证字符串是否合格的算法实现。该算法能够识别包含数字、字母及特定符号的字符串,并能正确处理中文字符。通过对每个字符的ASCII值进行检查,确保字符串符合预设的合法标准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--是否是合格字符串
function isLegal(str)
    local len = string.len(str)
    local base = {}
    
    local basePregStr = "_,.!?;:"
    local basePregStrLen = string.len(basePregStr)
    
    for i=1,basePregStrLen do
        
        table.insert(base,string.byte(basePregStr,i,i))
    end
    
    --0-9 a-z A-Z
    local numCode = string.byte("0",1,1)
    for i=1,10 do
        
        table.insert(base,numCode)
        numCode = numCode + 1
    end
    
    local wordCode_lower = string.byte("a",1,1)
    local wordCode_upper = string.byte("A",1,1)
    
    for i=1,26 do
        
        table.insert(base,wordCode_lower)
        table.insert(base,wordCode_upper)
        wordCode_upper = wordCode_upper + 1
        wordCode_lower = wordCode_lower + 1
    end
    
    -- for k,v in pairs(base) do
        
    --     print(k,'=>',string.format("%c",v))
    -- end
    
    function isInBase(n)
        local isIn = false
        for _,v in pairs(base) do
            if v == n then
                isIn = true
                break
            end
        end
        
        return isIn
    end
    
    
    local count = 0
    for i=1,len do
        
        if count > 0 then
            count = count - 1
            
        else
            print("i=>",i)
            local strNum = string.byte(str,i,i)
            
            if strNum < 127 then --汉字大于127 
                
                if isInBase(strNum) == false then
                    print("不在base中",i)
                    return false
                end
            else
                --判断是否 是汉字 而不是特殊字符 
                local s1 = strNum
                local s2 = string.byte(str,i+1,i+1)
                local s3 = string.byte(str,i+2,i+2)
                local s4 = s1..''..s2..''..s3

                local num = tonumber(s4)
                
                -- 汉字4e00 9fa5  
                -- lua中的范围 228184128   233190165
                if num < 228184128 or num > 233190165 then
                    return false
                end
                count = 2
            end
            
        end 
    end
    
    return true    
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值