체인의정석

API에서 블록체인 지갑 주소 받아올 때 해야할 필수 처리 (대소문자 처리 & 공백 제거) 본문

개발/backend(go)

API에서 블록체인 지갑 주소 받아올 때 해야할 필수 처리 (대소문자 처리 & 공백 제거)

체인의정석 2025. 6. 18. 15:30
728x90

블록체인 지갑 주소의 경우 대소문자 구분이 존재하지만 db상에는 소문자 기준으로 저장하거나 하는등의 특별한 기준이 필요하다.

이렇게 만들 경우 api에서 지갑 주소에 공백이 들어오거나 대소문자가 들어오게 되면 자동으로 변환해서 검색해주는 부분이 필요하게 된다.

filter["wallet_address"] = bson.M{
    "$regex": wallet,
    "$options": "i",
}

위와 같이 옵션에 i를 넣게 되면 대소문자 무시를 하게 되기 때문에 지갑 검색에 용이해지게 된다.

 

  • wallet 문자열을 정규표현식으로 검색하되,
  • "0xAaBb..."와 "0xaabb..."와 같이 대소문자를 구분하지 않고 비교합니다.
  • 예: 사용자가 "0xAabb"라고 입력해도, DB에 "0xaabb", "0XAABB" 등으로 저장된 값도 모두 검색됩니다.

그 외의 option은 다음과 같은 것이 존재한다.

🔧 "$options"에 사용 가능한 값들

옵션의미
"i" 대소문자 무시 (case-insensitive) ← 현재 사용 중
"m" 멀티라인 모드 (^, $가 각 줄 기준으로 작동)
"s" .이 줄바꿈 문자 포함하여 매칭
"x" 공백/주석 허용 (extended mode)


또한 지갑 주소에는 공백이 있으면 안되기 때문에 

bson.M{
  "$regex": wallet,
  "$options": "ix", // 대소문자 무시 + extended mode
}

 

위와 같이 쓸 수도있다.

다만 근본적인 해결책은 이를 고려하여서 wallet값을 db처리하는 쪽에 넘기는 것이다.

func LowerCaseWalletAddress(addr string) string {
	// 둘 다 소문자로 변환하고 공백도 제거한 후 비교
	return strings.ToLower(strings.TrimSpace(addr))
}

따라서 다음과 같은 앞뒤 공백 처리 로직을 넣은 util함수를 정의해서 사용하기로 하였다.

728x90
반응형
Comments