-
Notifications
You must be signed in to change notification settings - Fork 5
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
[FE] 계좌번호 입력 제한 추가 #634
Conversation
There was a problem hiding this 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} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
쿠키 덕분에 처음 알았어요...!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 이번에 처음 알게 됐어요! 혹시나 있을까 해서 봤는데 진짜 있었던
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ㄹㅇ 갓갓 onPaste
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생 많았수다 쿠키
진짜 생산력 갓
client/src/constants/regExp.ts
Outdated
@@ -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\-]*$/, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
accountNumber: /^[0-9\s\-]*$/, | |
accountNumber: ^\d+([\s\-]\d+)*[\s\-]?$, |
로 사용하면 연속된 -나 공백을 걸러줄 수 있어요~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
토다리는 정(규표현식의)신
minAccountNumberLength: 8, | ||
maxAccountNumberLength: 30, |
There was a problem hiding this comment.
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()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어차피 허용되는 문자인데 slice 를 사용하면 안되는 이유가 있었을까요?
setAccountNumber(event.target.value.replace(/[^0-9\s\-]/g, '').trim()); | |
setAccountNumber(event.target.value.slice(0, RULE.maxAccountNumberLength).trim()); |
There was a problem hiding this comment.
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" |
There was a problem hiding this comment.
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} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ㄹㅇ 갓갓 onPaste
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
되게 어려웠을 텐데도 결국 해낸 쿠키!! 멋집니다.. 고생많으셨어요 👍
issue
구현 사항
계좌번호 입력 제한
계좌번호 입력을 제한하는 기능을 추가했습니다.
올 수 있는 문자는 숫자, 공백, 하이픈(-)이며 8자에서 30자 이하입니다.
8자 이하로 오는 경우는 글자가 지워지도록 따로 예외로 문자를 수정할 수 있도록 열어뒀어요.
30자 이상은 입력을 막았습니다.
이외 다른 문자들은 허용하지 않도록 막았습니다.
복사 붙여넣기 대응
계좌번호의 경우 은행 앱에서 복사 붙여넣기 하는 경우가 많습니다.
그 때 은행마다 복사되는 형식이 달라서 은행 이름 정보가 포함된 경우에 입력이 안 될 수 있다는 우려가 있었습니다.
하지만 토스를 참고한 결과 토스는 "1213123123213 신한"을 복사 붙여넣기 할 경우 "1213123123213"이 입력되는 것을 확인하고 이처럼 구현하면 좋겠다 생각하고 구현했습니다.
복붙의 경우 onChange가 아닌 onPaste를 사용해서 따로 검증하도록 설정했습니다.
paste된 값에서 먼저 숫자, 공백, 하이픈을 제외한 문자만 남겨서 검증을 해서 유효하지 않은 문자를 제거했습니다.
또한 paste 이벤트가 일어났을 때 onChange callback이 실행되지 않도록 설정해 onPaste한 값이 검증되고 상태로 관리되도록 설정했어요.
데모영상
2024-09-25-17-28-41.mp4
🫡 참고사항