노드 숙련 과제에 회원가입 닉네임 제한사항에 최소 3자 이상, 알파벳 대소문자(a~z, A~Z), 숫자(0~9)
가 있었다.
찾아보니 정규표현식을 이용해서 특정한 문자열과 일치하는지 확인하는 방식으로 제한을 하는 거라고 한다.
// 숫자와 알파벳 소문자 또는 대문자를 포함하는 정규식
/(?=.*\d)(?=.*[a-zA-Z])/
처음에 /[a-zA-Z0-9]/
로 했다가 숫자가 포함되지 않아도 통과가 되길래 숫자를 반드시 포함하게 하려면 어떻게 해야 하지 찾다가 2시간 날린 듯하다...
어쨌든 아래와 같이 하면 알파벳 대문자 또는 소문자 그리고 숫자를 포함해야 하는 정규표현식이 된다.
// 닉네임은 최소 3자 이상, 알파벳 대소문자(a~z, A~Z), 숫자(0~9)로 구성
const nickCheck = /(?=.*\d)(?=.*[a-zA-Z])/
if (nickname.length < 3 || !nickCheck.test(nickname)) {
res.status(400).send({
errorMessage: "닉네임은 최소 3자 이상, 알파벳 대소문자, 숫자로 구성해야 합니다.",
});
return;
}
text() 메서드를 통해 정규표현식을 Boolean 값으로 평가할 수 있다.
정규표현식을 담은 변수.test(비교하고 싶은 데이터를 담은 변수)
와 같이 작성해서 비교했다.
사용자 로그인 게시글 댓글 좋아요 CRUD 기능 구현에 앞서 sql erd를 작성해야 했다.
https://drawsql.app/ 이라는 사이트를 사용하는데 데이터 타입 중 string이 없고 linestring / multilinestring 만 있길래 또 뇌정지...
아무 생각 없이 한줄짜리 string? linestring 아니야? 하면서 이름, 비밀번호 같은 문자열 타입을 linestring으로 선택했는데 잘못된 것이었다..
출처: https://sparkdia.tistory.com/24
이 블로그에 따르면 linestring / multilinestring 은 공간데이터 타입으로 다수의 Point를 연결해주는 선분 또는 다수 개의 LineString 집합에 쓰인다고 한다.
그러니까 비밀번호와 이름은 가변적인 문자열 타입인 varchar(255)로 지정해주는 게 맞겠다 싶었다.
그렇다면 또 한번의 고민... text와 varchar의 차이는 무엇일까..?
나와 똑같은 질문을 하는 사람이 있길래 가져와봤다.
출처: https://www.codeit.kr/community/threads/17667
이외에 여러 글에서 알 수 있듯 모두 문자열을 저장하지만 저장하는 위치와 최대 길이 수 등에서 차이를 보이는 것 같다.
text는 게시글이나 댓글처럼 긴 문자열을 저장하는 데 쓰면 될 것 같다.