diff --git a/src/components/ui/card-number-input.tsx b/src/components/ui/card-number-input.tsx index 9a44120a..70a14f99 100644 --- a/src/components/ui/card-number-input.tsx +++ b/src/components/ui/card-number-input.tsx @@ -29,12 +29,19 @@ export interface CardNumberInputProps */ const CardNumberInput = React.forwardRef( ({ className, value, onChange, error, ...props }, ref) => { - // 표시용 포맷된 값 - const displayValue = React.useMemo(() => formatCardNumber(value || ""), [value]); + // 마스킹된 값(****-****-****-1234) 여부 판별 + const isMasked = value?.includes('*') ?? false; + + // 표시용 포맷된 값: 마스킹이면 그대로, 숫자만이면 포맷팅 + const displayValue = React.useMemo(() => { + if (!value) return ""; + if (isMasked) return value; + return formatCardNumber(value); + }, [value, isMasked]); const handleChange = (e: React.ChangeEvent) => { const inputValue = e.target.value; - // 숫자만 추출하여 전달 + // 숫자만 추출하여 전달 (마스킹 문자 자동 제거) const numbersOnly = parseCardNumber(inputValue); onChange(numbersOnly); };