숫자만 입력되는 입력 필드 설정방법

숫자만 입력되는 입력 필드 설정방법

서론: "이상한 문자 입력이 막혔다? 그 이유가 궁금하다면!"

웹 사이트에서 폼을 작성할 때, 특정 입력 필드에 숫자만 입력되도록 제한하는 기능을 본 적이 있나요? 예를 들어, 전화번호나 우편번호를 입력하는 필드에서는 문자가 입력되지 않고 숫자만 입력되는 경우가 많습니다.

이 기능은 어떻게 구현될까요? 그리고 어떤 원리로 동작할까요? 이번 글에서는 다음과 같은 HTML 및 JavaScript 코드가 어떻게 숫자만 입력되도록 제한하는지에 대해 자세히 설명하겠습니다.

Html
<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. 1

    숫자가 아닌 문자는 자동으로 제거

  1. 2

    입력할 수 있는 최대 자릿수도 제한

이렇게 하면 보다 안전한 입력 필드를 만들 수 있습니다.

4. 다른 방법으로 숫자만 입력 제한하기

위 방법 외에도 JavaScript에서 숫자 입력을 제한하는 다양한 방법이 있습니다.

4.1 type="number" 속성 사용

HTML5에서 제공하는 type="number" 속성을 사용하면 기본적으로 숫자만 입력할 수 있도록 제한할 수 있습니다.

Html
<input type="number" class="text_issue required-input" placeholder="호수 입력" maxlength="5">

하지만 단점이 있습니다.

  • e, . 등의 문자 입력이 가능할 수도 있음 (브라우저에 따라 다름)

  • 숫자가 아닌 값을 완전히 차단할 수 없음

따라서 type="text"oninput 속성을 조합한 방법이 더 강력한 해결책이 될 수 있습니다.

4.2 keydown 이벤트 활용

oninput 대신 keydown 이벤트를 활용하여 키 입력 단계에서 숫자가 아닌 문자를 차단할 수도 있습니다.

Html
<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. 1

    oninput 이벤트를 사용하면 입력할 때마다 실시간으로 값이 변경됨

  1. 2

    정규 표현식(/[^0-9]/g)을 활용하여 숫자가 아닌 문자를 제거

  1. 3

    maxlength를 조합하여 입력할 수 있는 최대 길이 제한 가능

  1. 4

    다른 방법(type="number", onkeydown)도 있지만 oninput이 가장 효과적

이제 숫자 입력을 제한하는 방법을 잘 이해하셨나요? 실제 프로젝트에서 활용해 보면서 더욱 익숙해지길 바랍니다! 😊