HTML 강좌 / 입력값 검증: required, 길이·범위 제한, 오류 안내
HTML의 기본 입력값 검증은 제출 전에 빈 값, 길이, 숫자 범위, 일부 입력 형식을 확인합니다. required, minlength, max 같은 제약 조건을 쓰면 브라우저가 잘못된 값을 안내할 수 있지만, 서버에서도 반드시 다시 검사해야 합니다.
필수 입력과 길이 제한
<form 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 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"은 기본적인 형식 검사를 하지만 주소가 실제로 존재하는지는 확인하지 않습니다. 양식의 목적에 필요한 검증과 실제 사용자 안내를 별도로 생각해야 합니다. 수량과 날짜 등 값의 의미에 맞는 입력 유형은 input 유형 선택하기: 이메일·숫자·날짜·체크박스·라디오에서 고릅니다.
숫자 입력은 예제처럼 1~10의 정수를 기대할 때 min="1" max="10" step="1"을 함께 적을 수 있습니다. 범위를 벗어난 값이 입력칸에 보이는 것과 유효한 제출값으로 인정되는 것은 다릅니다. 브라우저의 증감 버튼만 시험하지 말고 직접 0, 11, 2.5를 입력해 제출해 보세요.
이 예제는 현재 주소로 GET 요청을 보내는 연습용입니다. 실제 이메일 주소는 입력하지 말고 name@example.com처럼 테스트 값만 사용하세요. 제약을 모두 만족해 제출이 진행되면 주소의 쿼리 문자열에서 people과 email 값을 확인할 수 있습니다. 데이터를 받는 서버 기능은 이 코드에 포함되지 않습니다.
오류 안내를 작성할 때
오류를 색으로만 표시하지 말고 무엇을 어떻게 고쳐야 하는지 글로 알려 주세요. 예를 들어 ‘잘못된 입력’보다 ‘참가 인원은 1~10명 사이의 정수로 입력하세요’가 행동을 안내합니다. 자체 오류 메시지를 구현한다면 어떤 필드의 오류인지 연결하고, 키보드 사용자가 해당 필드로 돌아갈 수 있는지도 확인해야 합니다. 입력 조건을 계속 보이게 하고 필드와 연결하려면 양식에 안내 문구 추가하기의 도움말 예제를 참고하세요.
브라우저 검증은 사용자가 개발자 도구로 우회하거나 직접 요청을 보낼 수 있습니다. 계정, 결제, 저장 데이터처럼 중요한 값은 서버에서 다시 검사하세요. 제약 조건과 브라우저 동작은 MDN의 HTML 양식 검증 안내를 참고할 수 있습니다.
novalidate를 form에 넣으면 기본적인 대화형 제출 검증을 건너뛸 수 있습니다. 자체 검증을 구현하는 경우가 아니라면 문제를 숨기려고 이 속성을 추가하지 마세요. 클라이언트 측 검사는 사용자의 입력을 돕는 기능이고, 서버 측 검사는 신뢰할 수 없는 요청을 처리할 때 반드시 필요한 별도 단계입니다.
직접 오류 인터페이스를 만들기 전에는 HTML 접근성의 키보드·초점·이름 점검도 함께 적용합니다.
경계값과 예상 오류를 표로 확인하기
앞의 참가 인원 예제는 min="1" max="10" step="1" required를 사용합니다. 아래 값을 직접 입력해 제출을 시험하며, 이메일에는 형식에 맞는 테스트 주소를 넣어 다른 필드의 오류와 혼동하지 않도록 합니다.
| 입력 | 확인할 조건 | 예상 결과 |
|---|---|---|
| 빈 값 | required |
필수 입력으로 제출 차단 |
| 0 | min |
최소값 미달 |
| 11 | max |
최대값 초과 |
| 2.5 | step |
허용되는 정수 간격과 불일치 |
| 2 | 모든 조건 | 해당 숫자 필드는 유효함 |
기본 오류 문구의 정확한 문장은 브라우저마다 다릅니다. 이 표는 메시지의 문장을 외우기 위한 것이 아니라 실패한 조건을 구분하기 위한 것입니다. 2가 유효해도 다른 필드가 잘못되면 양식 전체는 제출되지 않을 수 있습니다.
브라우저 기본 안내는 HTML 제약을 바탕으로 합니다. 직접 오류 문구를 표시하려면 오류를 해당 입력칸과 연결하고, 오류 상태의 갱신·초점 이동도 구현해야 합니다. 이는 별도 CSS·JavaScript와 테스트가 필요한 작업이며 aria-describedby 하나로 검증이 생기는 것은 아닙니다.
직접 점검하는 순서
- 필수 필드를 비우고 제출해 보세요.
- 허용 범위의 바로 바깥 값과 정상 값을 각각 입력해 보세요.
- 키보드만 사용해 필드와 제출 버튼으로 이동하고, 오류 메시지를 읽고 값을 고쳐 다시 제출해 보세요.




