본문 바로가기
Today I Learned/Dev

[정규식] ip 정규식

by dbs_ 2023. 2. 24.

 

최근에 회사에서 사용자가 등록한 특정 ip가 아니면 로그인 허용을 안하게 하는 로직을 구현한 적 있었는데, ip 등록 기능 때 유저가 제대로 입력했는지 validation 할 때 사용했던 정규식이다. 나는 원래 다른 패턴을 사용하고 있었는데 수석님께서 더 깔끔한 방법으로 알려주셔서 수정된 사항이다.
그런데 정규식.. 원래 구글링하는거 아닌가요? 진짜 빠르게 코드 적어나가시는 게 놀라웠다.. 


1. 일반적인 IPv4 정규식

-  (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.) : 세 번 반복하고 그 다음에 '.'을 빼고 한번 더 

private static final String IPV4_REGEX_PATTERN = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";

2. CIDR IPv4 정규식

- /(3[0-2]|[12]?[0-9]) : 맨 뒤에 subnet 자리 : 0 ~ 32

private static final String CIDR_IPV4_REGEX_PATTERN = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/(3[0-2]|[12]?[0-9])$";

3. IP 패턴 range 형식에 대한 정규식

- \\s*~\\s* : 중간에 '~' 물결표시 + 공백문자 

private static final String IPV4_RANGE_REGEX_PATTERN = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\s*~\\s*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";

 

찾아보면서 해석하니까 좀 재밌다. 계속 쓰다보면 외워지겠지.