Menu

HTML input type 종류: input 태그의 22가지 타입

HTML <input> 태그의 모든 type을 한곳에 모았어요. text, email, password, number, range, 날짜와 시간, color, file, hidden 등 각 타입이 무엇을 검사하는지, 휴대폰에서 어떤 키보드가 열리는지, 공통 속성은 무엇인지 알아봐요.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

input 태그와 type

<input>은 폼 필드이고, type 속성이 어떤 종류인지 정해요. 같은 태그가 텍스트 상자, 슬라이더, 날짜 선택기, 색 선택기가 돼요. 아래 필드를 하나씩 써 보고 Submit을 눌러 폼이 무엇을 보내는지 확인하세요.

<input>은 빈 요소라서 닫는 태그가 없어요. name은 값을 보낼 때 쓰는 키이고, value는 시작 값이에요. type이 없거나 철자가 틀리면 일반 텍스트 필드가 돼요.

HTML input type 전체

type무엇인지참고
text한 줄 텍스트기본값
password점으로 표시되는 텍스트그 자체로 암호화되지 않으니 HTTPS로 보내세요
email이메일 주소형식을 검사하고, 휴대폰 키보드에 @ 키가 나옴
url웹 주소https:// 같은 스킴으로 시작해야 함
tel전화번호모바일에서 숫자 키패드, 형식 검사 없음
search검색창지우기 버튼이 나오는 경우가 많음
number숫자스핀 버튼, min, max, step
range슬라이더원래 정밀하지 않은 입력용이고, 값은 숫자
date날짜값은 YYYY-MM-DD
time시각값은 HH:MM(24시간제)
datetime-local시간대 없는 날짜와 시각값은 YYYY-MM-DDTHH:MM
month연도와 월모든 브라우저에서 지원되지는 않음
week연도와 주차모든 브라우저에서 지원되지는 않음
color색 선택기값은 소문자 #rrggbb
checkbox켜고 끄는 상자HTML 체크박스 참고
radio묶음 중 하나 선택HTML 라디오 버튼 참고
file파일 선택기accept, multiple
hidden보이지 않지만 전송되는 값ID와 토큰용
submit제출 버튼<button type="submit">이 더 유연함
reset초기화 버튼좋은 선택인 경우가 드묾
button그 자체로는 아무 일도 하지 않는 버튼JavaScript용
image이미지로 그린 제출 버튼클릭 좌표도 함께 보냄

텍스트 계열 type과 휴대폰 키보드

email, url, tel, search, text는 데스크톱에서 모두 텍스트 상자처럼 보여요. 차이는 유효성 검사와, 휴대폰에서 어떤 키보드가 열리느냐예요. 이 예제의 테두리는 브라우저의 판단에 따라 초록색이나 빨간색으로 바뀌어요.

  • 브라우저에게 ada@example은 올바른 이메일이에요. 텍스트, @, 도메인이 있는지만 확인하고 도메인에 점이 있는지는 보지 않아요. 진짜 검사는 서버에서 해요.
  • example.com은 스킴이 없어서 올바른 url이 아니에요. https://example.com은 올바르고요.
  • tel은 무엇이든 받아요. 전화번호 형식은 나라마다 너무 달라서 기본 검사가 없으니, 필요하면 pattern을 추가하세요.
  • inputmode="numeric"은 type="number"의 문제 없이 휴대폰에 숫자 키보드를 요청해요. 그래서 우편번호, 인증 코드, 카드 번호에 알맞아요.

number와 range

둘 다 min, max, step을 받아요. number는 정확한 값용이고, range는 정확한 숫자가 덜 중요한 값을 위한 슬라이더예요. range 슬라이더는 숫자를 보여 주지 않으니 <output>과 함께 쓰세요.

number의 step 기본값은 1이라서, step="0.01"이 없는 가격 필드는 폼을 제출할 때 4.99를 거부해요. JavaScript에서 input.value는 항상 문자열이에요. 숫자를 얻으려면 input.valueAsNumber를 쓰세요.

날짜와 시간

날짜와 시간 type은 브라우저 자체 선택기를 열어요. 독자가 보는 형식은 로캘을 따르지만(09/24/2026, 24.09.2026, 2026. 09. 24.), 값은 항상 같은 고정 형식이에요.

서버가 받고 JavaScript가 읽는 것이 그 고정 형식이라서 "24.09.2026" 같은 문자열을 파싱할 일이 없어요. min과 max도 같은 형식을 받아요. datetime-local에는 시간대가 없어요. 시간대가 중요하다면 서버에서 독자의 시간대로 변환하세요.

color와 file

accept="image/*"는 파일 선택기를 이미지로 제한하고(휴대폰에서는 카메라도 제안해요), accept=".pdf,.docx"처럼 확장자도 받아요. 선택기에 주는 힌트일 뿐이니 파일 형식은 서버에서 확인하세요. multiple은 여러 파일을 허용해요. 실제로 업로드하려면 폼에 method="post"와 enctype="multipart/form-data"도 필요해요.

datalist로 추천 목록 주기

<datalist>는 텍스트 필드에 추천 목록을 주면서도 어떤 값이든 입력할 수 있게 해요. list 속성으로 연결하세요.

필드에 "ja"를 입력하면 일치하는 추천 항목이 보여요. select와 달리 독자가 목록에 없는 값을 입력할 수 있어요.

input에서 쓰는 속성

속성하는 일
name값을 제출할 때 쓰는 키
value시작 값
placeholder필드가 비어 있을 때 보이는 힌트(라벨이 아님)
required제출하기 전에 반드시 채워야 함
disabled쓸 수 없고 제출되지도 않음
readonly편집할 수 없지만 제출됨
autocomplete자동 완성할 내용: email, name, current-password, one-time-code, off
min, max, step숫자, range, 날짜, 시간의 한계
minlength, maxlength텍스트 계열의 길이 제한
pattern값 전체가 일치해야 하는 정규 표현식
inputmode보여 줄 휴대폰 키보드: numeric, decimal, email, tel, url
list<datalist>의 id
multiple여러 값, email과 file용
acceptfile의 파일 형식

자주 하는 실수

  • 전화번호, 우편번호, 카드 번호에 type="number"를 씀. 수량이 아니에요. tel이나 inputmode="numeric"과 함께 text를 쓰세요.
  • step="0.01" 없는 가격 필드. 소수 값이 유효성 검사에서 실패해요.
  • placeholder를 라벨로 씀. 독자가 입력하는 순간 사라져요.
  • 보안을 accept나 type="email"에 맡김. 편의 기능일 뿐이고, 서버가 다시 검사해요.
  • 대체 수단 없이 type="month"나 type="week"를 씀. 어떤 브라우저는 일반 텍스트 필드를 보여 줘요.
  • 닫는 </input> 태그를 씀. <input>은 빈 요소예요.

자주 묻는 질문

HTML input type은 몇 가지인가요?

22가지예요. button, checkbox, color, date, datetime-local, email, file, hidden, image, month, number, password, radio, range, reset, search, submit, tel, text, time, url, week이에요. 알 수 없는 type이거나 type이 없으면 text처럼 동작해요.

HTML input의 기본 type은 무엇인가요?

text예요. type이 없거나 브라우저가 모르는 type인 <input>은 한 줄짜리 텍스트 필드예요.

전화번호나 우편번호에 type="number"를 써도 되나요?

안 돼요. number는 수량을 위한 타입이라 스핀 버튼이 붙고, 전화번호에 들어가는 +, 공백, 하이픈을 거부해요. 전화번호에는 type="tel"을, 우편번호나 카드 번호 같은 코드에는 inputmode="numeric"과 함께 type="text"를 쓰세요.

input type date는 어떤 형식을 쓰나요?

화면에 어떤 형식으로 보이든 값은 항상 2026-09-24 같은 YYYY-MM-DD예요. 화면 표시는 독자의 로캘을 따르지만, 제출되는 값과 스크립트에서 읽는 값은 따르지 않아요.

input 태그에 닫는 태그가 필요한가요?

아니요. <input>은 빈 요소라서 <input type="text" name="city">처럼 써요. 닫는 </input>은 올바르지 않고, <input />의 슬래시는 허용되지만 아무 효과가 없어요.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기