Skip to content

Commit c4f819f

Browse files
authored
Merge pull request #133 from imaginer-dev/8-회원가입-폼을-입력하고-유효성-검증을-할-수-있어야-한다
fix: 닉네임 관련 유효성 검사 추가
2 parents 824fa55 + 131015f commit c4f819f

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

src/components/Join/JoinButton.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ interface DialogElement {
1515

1616
const messages = {
1717
NAME_ISVAILD_ERROR: '이름은 두글자 이상 입력 가능합니다.',
18+
NICKNAME_ISVAILD_ERROR: '닉네임은 2 ~ 12자 이상 입력 가능합니다.',
1819
PHONE_ISVAILD_ERROR: '휴대폰 번호를 정확히 입력해주세요.',
1920
PWCHECK_ISVAILD_ERROR: '비밀번호 확인을 진행해주세요.',
2021
EMAIL_PASSWORD_ISVAILD_ERROR: '이메일 또는 비밀번호 형식이 잘못되었습니다.',
@@ -43,6 +44,12 @@ const JoinButton = () => {
4344
return;
4445
}
4546

47+
if (!validator.isValidNickName(nickName)) {
48+
setDialogMessage(messages.NICKNAME_ISVAILD_ERROR);
49+
dialogRef.current?.openModal();
50+
return;
51+
}
52+
4653
if (!FormatPhone(phone)) {
4754
setDialogMessage(messages.PHONE_ISVAILD_ERROR);
4855
dialogRef.current?.openModal();

src/components/Join/NickNameInput.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import InputForm from '../common/InputForm.tsx';
22
import { useJoinState } from '../../stores/joinStore.ts';
3+
import { LooseValidation, ValidateProcessor } from '../../utils/authUtils.ts';
34

45
const NickNameInput = () => {
56
const { nickName, nickNameHandler } = useJoinState();
7+
const validator = new ValidateProcessor(new LooseValidation());
68

79
return (
810
<InputForm
@@ -15,6 +17,8 @@ const NickNameInput = () => {
1517
name={'nickName'}
1618
id={'nickName-input'}
1719
aria-label={'join-nickName-input'}
20+
error={!validator.isValidNickName(nickName)}
21+
errorText={'※ 닉네임은 2~12자 이내여야 합니다.'}
1822
/>
1923
);
2024
};

src/utils/authUtils.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export interface ValidationStrategy {
22
nameValidate(input: string): boolean;
3+
nickNameValidate(input: string): boolean;
34
phoneValidate(input: string): boolean;
45
emailValidate(input: string): boolean;
56
passwordValidate(input: string): boolean;
@@ -10,6 +11,10 @@ export class LooseValidation implements ValidationStrategy {
1011
nameValidate(name: string): boolean {
1112
return name.length >= 2;
1213
}
14+
nickNameValidate(nickName: string): boolean {
15+
const regex = /^[a-zA-Z0-9\u3131-\uD79D\uAC00-\uD7A3]+$/;
16+
return regex.test(nickName) && nickName.length >= 2 && nickName.length <= 12;
17+
}
1318
phoneValidate(phone: string): boolean {
1419
return phone.length == 11;
1520
}
@@ -30,6 +35,9 @@ export class StrongValidation implements ValidationStrategy {
3035
nameValidate(name: string): boolean {
3136
return name.length >= 2;
3237
}
38+
nickNameValidate(nickName: string): boolean {
39+
return nickName.length >= 2 && nickName.length <= 12;
40+
}
3341
phoneValidate(phone: string): boolean {
3442
return phone.length == 11;
3543
}
@@ -59,6 +67,10 @@ export class ValidateProcessor {
5967
return this.#validator.nameValidate(name);
6068
}
6169

70+
isValidNickName(nickName: string) {
71+
return this.#validator.nickNameValidate(nickName);
72+
}
73+
6274
isValidPhone(phone: string) {
6375
return this.#validator.phoneValidate(phone);
6476
}

0 commit comments

Comments
 (0)