Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FE] 계좌번호 입력 제한 추가 #634

Merged
merged 5 commits into from
Sep 26, 2024
Merged

[FE] 계좌번호 입력 제한 추가 #634

merged 5 commits into from
Sep 26, 2024

Conversation

jinhokim98
Copy link
Contributor

issue

구현 사항

계좌번호 입력 제한

계좌번호 입력을 제한하는 기능을 추가했습니다.
올 수 있는 문자는 숫자, 공백, 하이픈(-)이며 8자에서 30자 이하입니다.

8자 이하로 오는 경우는 글자가 지워지도록 따로 예외로 문자를 수정할 수 있도록 열어뒀어요.
30자 이상은 입력을 막았습니다.

이외 다른 문자들은 허용하지 않도록 막았습니다.

복사 붙여넣기 대응

계좌번호의 경우 은행 앱에서 복사 붙여넣기 하는 경우가 많습니다.
그 때 은행마다 복사되는 형식이 달라서 은행 이름 정보가 포함된 경우에 입력이 안 될 수 있다는 우려가 있었습니다.

하지만 토스를 참고한 결과 토스는 "1213123123213 신한"을 복사 붙여넣기 할 경우 "1213123123213"이 입력되는 것을 확인하고 이처럼 구현하면 좋겠다 생각하고 구현했습니다.

복붙의 경우 onChange가 아닌 onPaste를 사용해서 따로 검증하도록 설정했습니다.
paste된 값에서 먼저 숫자, 공백, 하이픈을 제외한 문자만 남겨서 검증을 해서 유효하지 않은 문자를 제거했습니다.
또한 paste 이벤트가 일어났을 때 onChange callback이 실행되지 않도록 설정해 onPaste한 값이 검증되고 상태로 관리되도록 설정했어요.

데모영상

2024-09-25-17-28-41.mp4

🫡 참고사항

@jinhokim98 jinhokim98 added this to the v2.0.0 milestone Sep 25, 2024
@jinhokim98 jinhokim98 self-assigned this Sep 25, 2024
@jinhokim98 jinhokim98 linked an issue Sep 25, 2024 that may be closed by this pull request
1 task
Copy link

Copy link
Contributor

@soi-ha soi-ha left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

깔-끔하게 입력 제한도 추가해줘서 좋아요! 고마워요 쿠키 !

value={accountNumber ?? ''}
onChange={handleAccount}
onPaste={handleAccountOnPaste}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

쿠키 덕분에 처음 알았어요...!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 이번에 처음 알게 됐어요! 혹시나 있을까 해서 봤는데 진짜 있었던

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ㄹㅇ 갓갓 onPaste

Copy link
Contributor

@Todari Todari left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생 많았수다 쿠키
진짜 생산력 갓

@@ -3,6 +3,7 @@ const REGEXP = {
eventUrl: /\/event\/([a-zA-Z0-9-]+)\//,
billTitle: /^([ㄱ-ㅎ가-힣a-zA-Z0-9ㆍᆢ]\s?)*$/,
memberName: /^([ㄱ-ㅎ가-힣a-zA-Zㆍᆢ]\s?)*$/,
accountNumber: /^[0-9\s\-]*$/,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
accountNumber: /^[0-9\s\-]*$/,
accountNumber: ^\d+([\s\-]\d+)*[\s\-]?$,

로 사용하면 연속된 -나 공백을 걸러줄 수 있어요~

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

토다리는 정(규표현식의)신

Comment on lines +6 to +7
minAccountNumberLength: 8,
maxAccountNumberLength: 30,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

상수화 굿굿

if (isValid) {
setAccountNumber(event.target.value);
} else if (!isValid && !isValidMinLength) {
setAccountNumber(event.target.value.replace(/[^0-9\s\-]/g, '').trim());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

어차피 허용되는 문자인데 slice 를 사용하면 안되는 이유가 있었을까요?

Suggested change
setAccountNumber(event.target.value.replace(/[^0-9\s\-]/g, '').trim());
setAccountNumber(event.target.value.slice(0, RULE.maxAccountNumberLength).trim());

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

8자보다 작을 때 숫자 공백 하이픈 외의 문자가 허용되지 않도록 하기 위해서입니다!

readOnly
onClick={() => setIsBottomSheetOpen(true)}
/>
<LabelInput
labelText="계좌번호"
placeholder="030302-04-191806"
errorText={null}
placeholder="ex) 030302-04-191806"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

올바른 placeholder 최고

value={accountNumber ?? ''}
onChange={handleAccount}
onPaste={handleAccountOnPaste}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ㄹㅇ 갓갓 onPaste

Copy link

Copy link
Contributor

@pakxe pakxe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

되게 어려웠을 텐데도 결국 해낸 쿠키!! 멋집니다.. 고생많으셨어요 👍

@soi-ha soi-ha merged commit 19b91a5 into fe-dev Sep 26, 2024
1 of 2 checks passed
@soi-ha soi-ha deleted the feature/#629 branch September 26, 2024 06:22
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: ✅ Done
Development

Successfully merging this pull request may close these issues.

[FE] 계좌번호 입력 제한 추가
4 participants