Skip to content

Instantly share code, notes, and snippets.

@QuadFlask
Created March 29, 2016 14:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save QuadFlask/4f23bc62222f9ca95da2 to your computer and use it in GitHub Desktop.
Save QuadFlask/4f23bc62222f9ca95da2 to your computer and use it in GitHub Desktop.
[CodeWars] IPv4 validation

겁나 간단한 수준의 정규식밖에 못써서 이렇게 했는데;;;

function isValidIP(str) {
  var r = /^([\d]{1,})\.([\d]{1,})\.([\d]{1,})\.([\d]{1,})$/g;
  var result = r.exec(str);
  if (result&&result.length==5)
    return result.slice(1).every(s=>(s.length==1?true:s[0]!='0') && 0<=+s && +s<=255);
  return false;
}

Best Practice

function isValidIP(str) {
  return /^(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])(\.(?!$)|$)){4}$/.test(str);
}

한방에 되네,, 좀 분석해 보면,,,

^
(
  (
      [1-9]?\d
    | 1\d\d
    | 2[0-4]\d
    | 25[0-5]
  )
  (\.(?!$)|$)
){4}
$

어차피 숫자 토큰? 하나가 4개 반복되는 형태이므로 토큰을 정규할 방법을 찾으면 된다

그래서 4가지의 경우의 수를 모두 or 로 넣으면 되는데,

  • [1-9]?\d : 1자리 숫자(09) 또는 1099까지의 숫자
  • 1\d\d : 100~199까지의 숫자
  • 2[0-4]\d : 200~249까지의 숫자
  • 25[0-5] : 250~255까지의 숫자

오홓홓ㅎ호호홓ㅎ 이렇게 보니까 쉽네,ㅋㅋ 저렇게 모든 경우의 수(0~255)를 커버...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment