숫자만 입력되는 입력 필드 설정방법
숫자만 입력되는 입력 필드 설정방법
서론: "이상한 문자 입력이 막혔다? 그 이유가 궁금하다면!"
웹 사이트에서 폼을 작성할 때, 특정 입력 필드에 숫자만 입력되도록 제한하는 기능을 본 적이 있나요? 예를 들어, 전화번호나 우편번호를 입력하는 필드에서는 문자가 입력되지 않고 숫자만 입력되는 경우가 많습니다.
이 기능은 어떻게 구현될까요? 그리고 어떤 원리로 동작할까요? 이번 글에서는 다음과 같은 HTML 및 JavaScript 코드가 어떻게 숫자만 입력되도록 제한하는지에 대해 자세히 설명하겠습니다.
<input type="text" class="text_issue required-input" placeholder="호수 입력" maxlength="5" oninput="this.value = this.value.replace(/[^0-9]/g, '');">
위 코드를 보면 정규 표현식(Regular Expression)을 활용하여 숫자만 입력되도록 제한하고 있습니다. 하지만 이 코드가 정확히 어떻게 동작하는지 궁금하지 않으신가요? 지금부터 쉽게 풀어보겠습니다.
본론: 숫자만 입력되는 원리와 정규식의 역할
1. 입력값을 제한하는 oninput
이벤트
oninput
속성은 사용자가 입력할 때마다 즉시 실행되는 이벤트입니다. 즉, 사용자가 키보드를 눌러 입력하면 즉시 JavaScript 코드가 실행되어 입력된 값을 검사합니다.
- •
this.value
: 현재 입력 필드의 값
- •
.replace(/[^0-9]/g, '');
: 정규 표현식을 활용하여 숫자가 아닌 문자를 제거
즉, 사용자가 숫자가 아닌 문자를 입력하면, 자동으로 그 문자는 제거되고 숫자만 남게 됩니다.
2. 정규 표현식(RegEx)의 역할
코드에서 사용된 정규 표현식(/[^0-9]/g
)을 분석해 보겠습니다.
정규 표현식 | 의미 |
[^0-9] | 숫자가 아닌 모든 문자 선택 |
g | 전체 문자열에서 일치하는 모든 부분을 찾음 |
즉, [^0-9]
는 숫자가 아닌 모든 문자를 의미하며, g
플래그는 입력된 전체 값에서 해당 패턴을 찾아 대체하도록 합니다.
예를 들어, 사용자가 abc123@!
을 입력했다고 가정하면:
- •
this.value.replace(/[^0-9]/g, '');
가 실행되면서
- •
abc
,@
,!
등 숫자가 아닌 문자는 삭제되고123
만 남게 됩니다.
3. maxlength
속성과의 조합
이 코드에는 maxlength="5"
속성이 추가되어 있습니다. 이는 사용자가 최대 5자리까지만 입력할 수 있도록 제한하는 기능입니다. 즉, 사용자가 6자리를 입력하려고 해도 입력되지 않습니다.
이 속성과 정규 표현식을 함께 사용하면:
- 1
숫자가 아닌 문자는 자동으로 제거
- 2
입력할 수 있는 최대 자릿수도 제한
이렇게 하면 보다 안전한 입력 필드를 만들 수 있습니다.
4. 다른 방법으로 숫자만 입력 제한하기
위 방법 외에도 JavaScript에서 숫자 입력을 제한하는 다양한 방법이 있습니다.
4.1 type="number"
속성 사용
HTML5에서 제공하는 type="number"
속성을 사용하면 기본적으로 숫자만 입력할 수 있도록 제한할 수 있습니다.
<input type="number" class="text_issue required-input" placeholder="호수 입력" maxlength="5">
하지만 단점이 있습니다.
- •
e
,.
등의 문자 입력이 가능할 수도 있음 (브라우저에 따라 다름)
- •
숫자가 아닌 값을 완전히 차단할 수 없음
따라서 type="text"
와 oninput
속성을 조합한 방법이 더 강력한 해결책이 될 수 있습니다.
4.2 keydown
이벤트 활용
oninput
대신 keydown
이벤트를 활용하여 키 입력 단계에서 숫자가 아닌 문자를 차단할 수도 있습니다.
<input type="text" class="text_issue required-input" placeholder="호수 입력" maxlength="5" onkeydown="return event.keyCode >= 48 && event.keyCode <= 57">
위 코드는 키보드 입력 단계에서 아예 숫자가 아닌 키 입력을 막는 방식입니다. 하지만 복사+붙여넣기(Ctrl+V
)를 하면 숫자가 아닌 값이 들어갈 수도 있습니다.
5. 다양한 입력 제한 방식 비교
방법 | 장점 | 단점 |
oninput + 정규식 | 모든 브라우저에서 숫자만 입력 가능 | maxlength 와 함께 사용해야 효과적 |
type="number" | 기본적인 숫자 입력 지원 | e , . 등이 입력될 가능성 있음 |
onkeydown | 키 입력 단계에서 차단 가능 | 붙여넣기를 통한 입력은 차단 불가 |
가장 강력한 방법은 oninput
+ 정규 표현식을 활용하는 것입니다.
마치며
이번 글에서는 oninput
속성과 정규 표현식을 활용하여 숫자만 입력되도록 제한하는 방법을 살펴보았습니다. 정리하자면:
- 1
oninput
이벤트를 사용하면 입력할 때마다 실시간으로 값이 변경됨
- 2
정규 표현식(
/[^0-9]/g
)을 활용하여 숫자가 아닌 문자를 제거
- 3
maxlength
를 조합하여 입력할 수 있는 최대 길이 제한 가능
- 4
다른 방법(
type="number"
,onkeydown
)도 있지만oninput
이 가장 효과적
이제 숫자 입력을 제한하는 방법을 잘 이해하셨나요? 실제 프로젝트에서 활용해 보면서 더욱 익숙해지길 바랍니다! 😊