入力内容をチェックして成功メッセージを表示するテキストボックスを作る方法
入力内容をチェックして成功メッセージを表示するテキストボックスを作る方法を紹介します。このサンプルでは、名前・電話番号・メールアドレスをJavaScriptで判定し、条件を満たした場合は緑色の成功メッセージを表示します。入力内容が正しくない場合はエラーメッセージも表示されるため、入力ミスを分かりやすく案内できます。
お問い合わせフォームや会員登録画面、申し込みフォームなどでは、入力内容が正しいことを利用者へ伝えることで安心して送信操作へ進めます。名前は未入力、電話番号は0から始まる番号、メールアドレスは一般的な形式かどうかを確認するため、実際のWebサイトでも利用しやすい構成です。
判定条件や表示メッセージはJavaScriptから簡単に変更できます。入力項目やメッセージ内容を用途に合わせてカスタマイズしながら利用できるため、初心者でも導入しやすい入力チェック用サンプルとして活用できます。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項
本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
入力内容チェック
名前・電話番号・メールアドレスを入力し、「入力内容を確認」を押してください。
名前・電話番号・メールアドレスを入力して「入力内容を確認」を押してください。入力内容が正しい項目には緑色の成功メッセージ、不正な項目には赤色のエラーメッセージが表示されます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>入力内容をチェックして成功メッセージを表示するテキストボックス</title>
<!-- CSSファイル -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- 全体 -->
<div class="success-validation-textbox_wrap">
<!-- タイトル -->
<div class="success-validation-textbox_title">
入力内容チェック
</div>
<!-- 説明文 -->
<p class="success-validation-textbox_text">
名前・電話番号・メールアドレスを入力して確認してください。
</p>
<!-- 入力フォーム -->
<div class="success-validation-textbox_fields">
<!-- 名前 -->
<div
class="success-validation-textbox_group"
id="name-group">
<label
class="success-validation-textbox_label"
for="name">
お名前
</label>
<input
class="success-validation-textbox_input"
id="name"
type="text"
placeholder="例:山田 太郎">
<p
class="success-validation-textbox_message"
id="name-message">
</p>
</div>
<!-- 電話番号 -->
<div
class="success-validation-textbox_group"
id="tel-group">
<label
class="success-validation-textbox_label"
for="tel">
電話番号
</label>
<input
class="success-validation-textbox_input"
id="tel"
type="text"
placeholder="例:090-1234-5678">
<p
class="success-validation-textbox_message"
id="tel-message">
</p>
</div>
<!-- メールアドレス -->
<div
class="success-validation-textbox_group"
id="email-group">
<label
class="success-validation-textbox_label"
for="email">
メールアドレス
</label>
<input
class="success-validation-textbox_input"
id="email"
type="text"
placeholder="例:sample@example.com">
<p
class="success-validation-textbox_message"
id="email-message">
</p>
</div>
</div>
<!-- 確認ボタン -->
<button
class="success-validation-textbox_button"
type="button"
id="check-button">
入力内容を確認
</button>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
/* ページ全体 */
body{
margin:0; /* ブラウザ標準の外側余白を削除 */
padding:40px 20px; /* 上下40px・左右20px。値を大きくすると画面端との間隔が広がる */
background:#ffffff; /* ページ全体の背景色 */
color:#111827; /* ページ全体の基本文字色 */
font-family:sans-serif; /* ページ全体で使用するフォント */
}
/* 入力内容チェック全体 */
.success-validation-textbox_wrap{
width:100%; /* 画面幅に合わせて横幅を縮小 */
max-width:760px; /* 最大横幅。900pxにすると広く、600pxにするとコンパクトになる */
margin:40px auto; /* 上下40pxの余白を付けて左右中央へ配置 */
padding:40px; /* 内側余白。56pxにすると広く、24pxにすると狭くなる */
border:1px solid #dbe5f1; /* 全体を囲む枠線の太さ・種類・色 */
border-radius:24px; /* 全体の角丸。36pxにすると丸く、0にすると四角くなる */
background:#f8fbff; /* 全体の背景色 */
box-sizing:border-box; /* paddingとborderを横幅へ含める */
}
/* タイトル */
.success-validation-textbox_title{
margin:0 0 12px; /* 下側12pxの余白。値を大きくすると説明文との間隔が広がる */
color:#111827; /* タイトルの文字色 */
font-size:36px; /* タイトルの文字サイズ。42pxにすると大きく、28pxにすると小さくなる */
font-weight:700; /* タイトルを太字にする */
line-height:1.5; /* タイトルの行間 */
text-align:center; /* タイトルを中央揃えにする */
}
/* 説明文 */
.success-validation-textbox_text{
margin:0 0 36px; /* 下側36pxの余白。値を大きくすると入力項目との間隔が広がる */
color:#64748b; /* 説明文の文字色 */
font-size:18px; /* 説明文の文字サイズ。20pxにすると大きく、16pxにすると小さくなる */
line-height:1.8; /* 説明文の行間。値を大きくすると行間が広がる */
text-align:center; /* 説明文を中央揃えにする */
}
/* 入力項目一覧 */
.success-validation-textbox_fields{
display:grid; /* 入力項目を縦方向へ並べる */
gap:24px; /* 入力項目同士の間隔。32pxにすると広く、16pxにすると狭くなる */
}
/* 各入力項目 */
.success-validation-textbox_group{
width:100%; /* 親要素の横幅いっぱいに表示 */
}
/* ラベル */
.success-validation-textbox_label{
display:block; /* ラベルを1行で表示 */
margin-bottom:10px; /* 下側10pxの余白。値を大きくすると入力欄との間隔が広がる */
color:#111827; /* ラベルの文字色 */
font-size:17px; /* ラベルの文字サイズ。19pxにすると大きく、15pxにすると小さくなる */
font-weight:700; /* ラベルを太字にする */
line-height:1.5; /* ラベルの行間 */
}
/* テキストボックス */
.success-validation-textbox_input{
width:100%; /* 親要素の横幅いっぱいに表示 */
padding:14px 16px; /* 上下14px・左右16px。上下を大きくすると入力欄が高くなる */
border:2px solid #cbd5e1; /* 通常時の枠線。2pxを大きくすると枠線が太くなる */
border-radius:10px; /* 入力欄の角丸。20pxにすると丸く、0にすると四角くなる */
background:#ffffff; /* 通常時の背景色 */
color:#111827; /* 入力文字の色 */
font-family:inherit; /* ページ全体と同じフォントを使用 */
font-size:17px; /* 入力文字のサイズ。19pxにすると大きく、15pxにすると小さくなる */
line-height:1.5; /* 入力文字の行間 */
box-sizing:border-box; /* paddingとborderを横幅へ含める */
outline:none; /* ブラウザ標準の外枠を非表示 */
transition:
border-color 0.3s ease,
background-color 0.3s ease,
box-shadow 0.3s ease;
/*
0.3秒で枠線・背景色・影を切り替える。
0.6sにするとゆっくり、0.1sにすると素早く変化する。
3か所の0.3sを同じ値へ変更する。
*/
}
/* プレースホルダー */
.success-validation-textbox_input::placeholder{
color:#94a3b8; /* プレースホルダーの文字色 */
opacity:1; /* ブラウザごとの透明度差をなくす */
}
/* 入力欄をクリックした状態 */
.success-validation-textbox_input:focus{
border-color:#2563eb; /* フォーカス時の枠線色 */
box-shadow:0 0 0 4px rgba(37,99,235,0.14); /* 外側へ4pxの強調表示。6pxにすると広く、2pxにすると控えめになる */
}
/* 入力内容が正しい状態 */
.success-validation-textbox_input.is-success{
border-color:#16a34a; /* 成功時の枠線色 */
background:#f0fdf4; /* 成功時の背景色 */
box-shadow:0 0 0 4px rgba(22,163,74,0.12); /* 成功時の緑色の強調範囲。4pxを大きくすると広がる */
}
/* 入力内容に問題がある状態 */
.success-validation-textbox_input.is-error{
border-color:#dc2626; /* エラー時の枠線色 */
background:#fef2f2; /* エラー時の背景色 */
box-shadow:0 0 0 4px rgba(220,38,38,0.12); /* エラー時の赤色の強調範囲。4pxを大きくすると広がる */
}
/* 判定メッセージ */
.success-validation-textbox_message{
min-height:24px; /* メッセージがない状態でも24pxの高さを確保し、レイアウトのずれを防ぐ */
margin:8px 0 0; /* 上側8pxの余白。値を大きくすると入力欄との間隔が広がる */
color:#64748b; /* 初期状態の文字色 */
font-size:14px; /* メッセージの文字サイズ。16pxにすると大きく、12pxにすると小さくなる */
font-weight:700; /* メッセージを太字にする */
line-height:1.6; /* メッセージの行間 */
}
/* 成功メッセージ */
.success-validation-textbox_message.is-success{
color:#16a34a; /* 成功メッセージの文字色 */
}
/* エラーメッセージ */
.success-validation-textbox_message.is-error{
color:#dc2626; /* エラーメッセージの文字色 */
}
/* 入力内容を確認するボタン */
.success-validation-textbox_button{
display:block; /* ボタンをブロック要素として表示 */
min-width:180px; /* ボタンの最低横幅。240pxにすると広く、140pxにすると狭くなる */
min-height:50px; /* ボタンの最低高さ。60pxにすると高く、42pxにすると低くなる */
margin:36px auto 0; /* 上側36pxの余白を付けて左右中央へ配置 */
padding:14px 30px; /* 上下14px・左右30px。値を大きくするとボタンが大きくなる */
border:none; /* ボタンの枠線を非表示 */
border-radius:10px; /* ボタンの角丸。20pxにすると丸く、0にすると四角くなる */
background:#2563eb; /* ボタンの背景色 */
color:#ffffff; /* ボタンの文字色 */
font-family:inherit; /* ページ全体と同じフォントを使用 */
font-size:17px; /* ボタン文字のサイズ。19pxにすると大きく、15pxにすると小さくなる */
font-weight:700; /* ボタン文字を太字にする */
line-height:1.5; /* ボタン文字の行間 */
cursor:pointer; /* マウスカーソルを指型へ変更 */
transition:background-color 0.3s ease; /* 0.3秒で背景色を変化。0.6sにするとゆっくり、0.1sにすると速くなる */
}
/* ボタンへマウスを重ねた状態 */
.success-validation-textbox_button:hover{
background:#1d4ed8; /* マウスを重ねた時の背景色 */
}
/* ボタンへフォーカスした状態 */
.success-validation-textbox_button:focus{
outline:3px solid rgba(37,99,235,0.22); /* 外側の強調表示。3pxを大きくすると太くなる */
outline-offset:3px; /* ボタンと外枠の間隔。値を大きくすると外側へ離れる */
}
/* 画面幅640px以下 */
@media screen and (max-width:640px){
/* スマートフォン表示時のページ全体 */
body{
padding:24px 12px; /* 上下24px・左右12pxへ縮小 */
}
/* スマートフォン表示時の全体 */
.success-validation-textbox_wrap{
margin:24px auto; /* 上下余白を24pxへ縮小 */
padding:24px 18px; /* 上下24px・左右18pxへ縮小 */
}
/* スマートフォン表示時のタイトル */
.success-validation-textbox_title{
font-size:28px; /* タイトルの文字サイズを28pxへ縮小 */
}
/* スマートフォン表示時の説明文 */
.success-validation-textbox_text{
font-size:16px; /* 説明文の文字サイズを16pxへ縮小 */
}
/* スマートフォン表示時の入力項目一覧 */
.success-validation-textbox_fields{
gap:20px; /* 入力項目同士の間隔を20pxへ縮小 */
}
/* スマートフォン表示時の入力欄 */
.success-validation-textbox_input{
padding:13px 14px; /* 上下13px・左右14pxへ縮小 */
font-size:16px; /* 入力文字のサイズを16pxへ縮小 */
}
/* スマートフォン表示時のボタン */
.success-validation-textbox_button{
width:100%; /* ボタンを横幅いっぱいに表示 */
}
}
// 入力内容を確認ボタン
const checkButton=document.getElementById("check-button");
// ボタンクリック時
checkButton.addEventListener("click",()=>{
// 名前をチェック
validateField(
"name",
"name-message",
value=>value.trim()!=="",
"✓ 正しく入力されています。",
"お名前を入力してください。"
);
// 電話番号をチェック
validateField(
"tel",
"tel-message",
value=>/^0\d{9,10}$/.test(value.replace(/-/g,"")),
"✓ 正しく入力されています。",
"0から始まる10桁または11桁の電話番号を入力してください。"
);
// メールアドレスをチェック
validateField(
"email",
"email-message",
value=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value.trim()),
"✓ 正しく入力されています。",
"メールアドレスの形式が正しくありません。"
);
});
/*
入力内容を判定する共通処理
*/
function validateField(inputId,messageId,checkRule,successMessage,errorMessage){
// 入力欄
const input=document.getElementById(inputId);
// メッセージ表示欄
const message=document.getElementById(messageId);
// 判定結果
if(checkRule(input.value)){
// エラー状態を解除
input.classList.remove("is-error");
message.classList.remove("is-error");
// 成功状態へ変更
input.classList.add("is-success");
message.classList.add("is-success");
// 成功メッセージ
message.textContent=successMessage;
}else{
// 成功状態を解除
input.classList.remove("is-success");
message.classList.remove("is-success");
// エラー状態へ変更
input.classList.add("is-error");
message.classList.add("is-error");
// エラーメッセージ
message.textContent=errorMessage;
}
}
コードをコピーする場合
使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。
サンプル一式を取得する場合
HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLで入力フォームを作成し、CSSで通常時・成功時・エラー時のデザインを設定します。JavaScriptでは名前・電話番号・メールアドレスを判定し、入力内容に応じて成功メッセージまたはエラーメッセージを表示します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlは入力フォーム全体を構成するファイルです。入力項目、プレースホルダー、ボタンの文字、ラベルなどを編集できます。
style.cssはフォームのデザインを設定するファイルです。入力欄やボタンの色、サイズ、余白、角丸、成功時・エラー時の表示色などを変更できます。
script.jsは入力内容を判定するファイルです。名前・電話番号・メールアドレスの入力条件や、表示する成功メッセージ・エラーメッセージを編集できます。
設置方法・使い方
sampleフォルダへindex.html・style.css・script.jsを配置します。sample/index.htmlをブラウザで開き、名前・電話番号・メールアドレスを入力して「入力内容を確認」を押してください。入力内容が条件を満たしている項目は緑色で成功メッセージが表示され、条件を満たしていない項目は赤色のエラーメッセージが表示されます。
カスタマイズできる内容
index.htmlではラベル名、プレースホルダー、ボタンの文字を変更できます。style.cssでは入力欄やボタンの色、サイズ、角丸、余白、成功・エラー時の配色を変更できます。script.jsでは入力チェック条件や成功メッセージ、エラーメッセージの内容を用途に合わせて変更できます。
数値調整
style.css
max-width:760px;
フォーム全体の最大横幅です。値を大きくすると横長になり、小さくするとコンパクトになります。
padding:40px;
フォーム全体の内側余白です。値を大きくすると余白が広がり、小さくすると詰まった表示になります。
gap:24px;
各入力項目の間隔です。値を大きくすると項目同士が離れ、小さくすると間隔が狭くなります。
padding:14px 16px;
入力欄の内側余白です。上下の値を大きくすると入力欄が高くなります。
border-radius:10px;
入力欄やボタンの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:17px;
入力文字やボタン文字の大きさです。値を変更すると文字サイズが変わります。
transition:0.3s;
色や影が切り替わる時間です。0.3秒で変化します。値を大きくするとゆっくり、小さくすると速く切り替わります。
box-shadow:0 0 0 4px ...
成功時・エラー時に表示する外側の強調範囲です。4pxを変更すると強調表示の太さが変わります。
min-width:180px;
ボタンの最低横幅です。値を大きくするとボタンが横長になります。
min-height:50px;
ボタンの最低高さです。値を大きくすると押しやすいボタンになります。
script.js
/^0\d{9,10}$/
電話番号の判定です。先頭を0とし、その後ろを9〜10桁と判定するため、10桁または11桁の電話番号を許可します。
value.replace(/-/g,"")
ハイフンを除去してから判定します。090-1234-5678のような入力も利用できます。
/^[^\s@]+@[^\s@]+\.[^\s@]+$/
メールアドレス形式を判定する正規表現です。通常は変更せず、そのまま利用できます。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-widthにより画面幅に合わせて縮小表示されます。また、640px以下では余白や文字サイズを小さくし、確認ボタンは横幅いっぱいに表示されるため、スマートフォン・タブレット・PCで利用できます。
コメント