겁나 간단한 수준의 정규식밖에 못써서 이렇게 했는데;;;
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;
}
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)를 커버...