2016-11-21 3 views
2

나는 다음과 같은 루아 코드를 한 : IPv4를 주소 검증이 논리루아 패턴 일치 시도에서 반복 횟수를 지정하는 방법은 무엇입니까?

local chunks = {ip:match("(%d+)%.(%d+)%.(%d+)%.(%d+)")} 
if (#chunks == 4) then 
    for _,v in pairs(chunks) do 
     if (tonumber(v) < 0 or tonumber(v) > 255) then 
      return false 
     end 
    end 
    return true 
else 
    return false 
end 

문제 (다른 유래에 여기 게시물에 기반)입니다 내가 "1.2.3.4.5"와 같은 주소를 테스트 변수 "청크"는 여전히 4로 평가됩니다. 정확히 4 개의 8 진수가있을 때만이 패턴이 통과하도록이 패턴을 어떻게 변경할 수 있습니까?

감사합니다.

답변

2

당신은 패턴의 시작/끝 부분에 각각 "문자열의 시작 부분에서 일치"와 "일치하는 문자열의 마지막에있는"의미 ^$ 경기가 전체 문자열을 캡처 요구하는 앵커 패턴을 사용할 수 있습니다 :

local chunks = {ip:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")} 
관련 문제