AD JB Toolbox 01

HTML 강좌 / 입력값 검증: required, 길이·범위 제한, 오류 안내

HTML의 기본 입력값 검증은 제출 전에 빈 값, 길이, 숫자 범위, 일부 입력 형식을 확인합니다. required, minlength, max 같은 제약 조건을 쓰면 브라우저가 잘못된 값을 안내할 수 있지만, 서버에서도 반드시 다시 검사해야 합니다.

필수 입력과 길이 제한

<form action="" method="get">
  <label for="nickname">별명(2~20자)</label>
  <input id="nickname" name="nickname" type="text"
         required minlength="2" maxlength="20">
  <button type="submit">확인</button>
</form>

별명을 비운 채 제출하면 브라우저가 입력을 요구합니다. 너무 짧은 값을 직접 입력하면 길이 제한에 맞지 않는다고 안내할 수 있습니다. 안내 문구의 정확한 표현은 브라우저·운영체제·언어 설정에 따라 다릅니다. 입력 조건은 오류가 난 뒤에만 알리지 말고 예제처럼 레이블 가까이에 적으세요.

required는 빈 값을 막고, minlength는 사용자가 입력한 값의 길이를 검사합니다. 둘 중 하나만 있으면 다른 조건까지 자동으로 충족되는 것은 아닙니다. 예제에서 한 글자를 직접 입력해 제출해 보고, 두 글자로 고친 뒤 다시 시도하면 차이를 확인할 수 있습니다. 자바스크립트로 값을 채운 경우에는 길이 제약의 검사 동작이 달라질 수 있어 별도 테스트가 필요합니다.

maxlength="20"은 일반적으로 20자를 넘겨 직접 입력하지 못하게 합니다. 다만 HTML의 길이 제한은 UTF-16 코드 단위로 계산하므로 이모지처럼 눈에 보이는 한 글자와 계산 결과가 다를 수 있습니다. 이런 문자를 허용한다면 실제 입력과 서버 검증을 함께 시험하세요. 자세한 기준은 MDN maxlength 문서에서 확인할 수 있습니다.

숫자 범위와 형식 검증

<form action="" method="get">
  <label for="people">참가 인원(1~10명)</label>
  <input id="people" name="people" type="number"
         min="1" max="10" step="1" required>

  <label for="email">이메일</label>
  <input id="email" name="email" type="email" required>
  <button type="submit">확인</button>
</form>

min과 max는 허용 범위를, step은 값의 간격을 정합니다. type="email"은 기본적인 형식 검사를 하지만 주소가 실제로 존재하는지는 확인하지 않습니다. 양식의 목적에 필요한 검증과 실제 사용자 안내를 별도로 생각해야 합니다.

숫자 입력은 예제처럼 1~10의 정수를 기대할 때 min="1" max="10" step="1"을 함께 적을 수 있습니다. 범위를 벗어난 값이 입력칸에 보이는 것과 유효한 제출값으로 인정되는 것은 다릅니다. 브라우저의 증감 버튼만 시험하지 말고 직접 0, 11, 2.5를 입력해 제출해 보세요.

이 예제는 현재 주소로 GET 요청을 보내는 연습용입니다. 실제 이메일 주소는 입력하지 말고 name@example.com처럼 테스트 값만 사용하세요. 제약을 모두 만족해 제출이 진행되면 주소의 쿼리 문자열에서 people과 email 값을 확인할 수 있습니다. 데이터를 받는 서버 기능은 이 코드에 포함되지 않습니다.

오류 안내를 작성할 때

오류를 색으로만 표시하지 말고 무엇을 어떻게 고쳐야 하는지 글로 알려 주세요. 예를 들어 ‘잘못된 입력’보다 ‘참가 인원은 1~10명 사이의 정수로 입력하세요’가 행동을 안내합니다. 자체 오류 메시지를 구현한다면 어떤 필드의 오류인지 연결하고, 키보드 사용자가 해당 필드로 돌아갈 수 있는지도 확인해야 합니다.

브라우저 검증은 사용자가 개발자 도구로 우회하거나 직접 요청을 보낼 수 있습니다. 계정, 결제, 저장 데이터처럼 중요한 값은 서버에서 다시 검사하세요. 제약 조건과 브라우저 동작은 MDN의 HTML 양식 검증 안내를 참고할 수 있습니다.

novalidate를 form에 넣으면 기본적인 대화형 제출 검증을 건너뛸 수 있습니다. 자체 검증을 구현하는 경우가 아니라면 문제를 숨기려고 이 속성을 추가하지 마세요. 클라이언트 측 검사는 사용자의 입력을 돕는 기능이고, 서버 측 검사는 신뢰할 수 없는 요청을 처리할 때 반드시 필요한 별도 단계입니다.

직접 점검하는 순서

  1. 필수 필드를 비우고 제출해 보세요.
  2. 허용 범위의 바로 바깥 값과 정상 값을 각각 입력해 보세요.
  3. 키보드만 사용해 필드와 제출 버튼으로 이동하고, 오류 메시지를 읽고 값을 고쳐 다시 제출해 보세요.
같은 카테고리의 다른 글
HTML 강좌 / 제목과 문단

HTML 강좌 / 제목과 문단

HTML h1~h6 제목 태그와 p 문단 태그의 역할 및 올바른 구조를 예제로 설명합니다. 제목 단계 구성, br 줄바꿈과 자주 발생하는 작성 오류도 함께 확인할 수 있습니다.

HTML 강좌 / input 유형 선택하기: 이메일·숫자·날짜·체크박스·라디오

HTML 강좌 / input 유형 선택하기: 이메일·숫자·날짜·체크박스·라디오

입력 목적에 맞는 input type을 고르고 체크박스와 라디오 버튼의 선택·제출 동작을 구분하는 방법을 설명합니다.

HTML 강좌 / fieldset, legend, autocomplete로 양식 설명하기

HTML 강좌 / fieldset, legend, autocomplete로 양식 설명하기

fieldset과 legend로 관련 입력을 묶고, autocomplete 토큰으로 필드의 입력 목적을 알리는 방법을 설명합니다.

HTML 강좌 / 링크(link)

HTML 강좌 / 링크(link)

HTML 링크의 href에 절대경로와 상대경로를 쓰고, 문서 내부 이동·이메일·새 탭·다운로드 링크를 만드는 방법을 예제로 설명합니다.

HTML 강좌 / 읽기 쉬운 표 만들기: caption, th, scope, 셀 병합

HTML 강좌 / 읽기 쉬운 표 만들기: caption, th, scope, 셀 병합

caption과 제목 셀의 scope로 표의 관계를 분명히 하고, colspan·rowspan으로 셀을 병합할 때 주의할 점을 설명합니다.

HTML / Tutorial / 양식에 안내 문구 추가하는 방법

HTML / Tutorial / 양식에 안내 문구 추가하는 방법

HTML 양식에서 label, placeholder, value의 역할을 구분하고 안내 문구를 넣는 방법을 설명합니다. input·textarea 예제와 필수 입력 검사, 빈 값의 제출 동작을 함께 확인할 수 있습니다.

HTML 강좌 / form의 구조와 GET·POST 제출 방식

HTML 강좌 / form의 구조와 GET·POST 제출 방식

form, action, method, name의 역할을 이해하고 GET과 POST 방식으로 양식 값이 전달되는 차이를 설명합니다.

HTML 강좌 / 문서 제목·설명·언어·문자 인코딩 설정하기

HTML 강좌 / 문서 제목·설명·언어·문자 인코딩 설정하기

title, meta description, html lang, UTF-8 문자 인코딩, viewport의 역할을 완성된 HTML 문서 예제로 설명합니다.

HTML 강좌 / 시맨틱 요소로 페이지 영역 나누기

HTML 강좌 / 시맨틱 요소로 페이지 영역 나누기

header, nav, main, section, article, aside, footer의 역할을 구분하고 간단한 페이지를 의미에 맞게 구성하는 방법을 설명합니다.

HTML 강좌 / div와 span은 언제 사용할까?

HTML 강좌 / div와 span은 언제 사용할까?

div와 span의 차이와 사용 기준을 설명하고, 의미 요소가 없는 경우에만 묶음 요소를 쓰는 예제를 보여 줍니다.