변수에 대한 유효성 검증은 어떤 개발 언어에서든 동일한 방식으로 구현된다.
나의 경우 Library 형태의 함수화하는 걸 즐기는 편이라 여러가지 형태의 변수값 유효성 체크 함수들을
하나의 파일에 모아두고 import하여 사용한다.
1. 일반 문자열
- 조건 : Length
모든 값들을 Database에 저장한다면 해당 값에 대한 MAX 값이 존재할 것이다.
입력한 문자열의 길이가 Database에 할당된 저장 공간보다 크다면 INSERT 작업이 실패날 것이다.
def check_String_Length(min, max, value):
if len(value) > max or llen(value) < min :
return False
else:
return True
2. 숫자 문자열
- 조건 : Is Decimal?, Range
숫자로 된 문자열이니 숫자만 입력가능하여야 하며, 숫자이므로 입력 범위가 필요하다.
예를들면, PORT 번호 같은 경우이다. PORT는 WELL-KNOWN PORT를 제외하고 1024~65535까지 사용가능 하다.
def check_Decimal_And_Range(min, max, value):
if value.isdecimal() == False:
return False
if int(value) > max or int(value) < min :
return False
else:
return True
3. 나열값 (ENUM)
- 조건 : Length, Range
ENUM값은 GUI에서는 Select 박스로 구현하면 참 간단하고 쉽다.
CUI에서는 ENUM List를 별도로(환경설정파일) 관리하여 사용하면 추가/삭제도 편리하다.
enum_list = ['ORACLE', 'MYSQL', 'MSSQL', 'MARIADB', 'DB2']
def check_Enum(enum_list, value):
if value not in enum_list:
return False
else:
return True
4. IP Address
입력된 값이 IP 주소 형태인지 확인하는 가장 간단한 법은 Python에서 제공하는 ipaddress 모듈을 사용하는 것이다.
복잡하게 정규식을 사용하지 않아도 IPv4/IPv6 모두 간단히 확인 가능하다.
import ipaddress
def check_Ip_Address(value, log):
try:
ip = ipaddress.ip_address(value) # just ask!!
log.debug("[{}] is IP{} Address.".format(ip, ip.version))
return True
except ValueError:
return False
5. E-mail Address
SI 사업을 진행하다보니 사용자 정보를 관리해야하는 경우가 발생하여 E-MAIL 주소를 입력받는 경우가 있었다.
E-MAIL 주소형태는 간단한 정규식으로 가능하다. (구글링하면 많이 나온다..)
import re
def check_Email_Address(value):
email = re.compile(r'''(
([a-zA-Z0-9._%+-]+) # 이메일의 @ 앞부분
@
([a-zA-Z0-9.-]+) # 이메일의 @ 뒷부분
(\.[a-zA-Z]{2,4}))'''. re.VERBOSE)
result = email.match(value)
if result is None:
return False
else:
return True
또 뭐가 있을까...
필요할 때마다 만들어서 계속 추가해야겠다.