会員登録フォームで2回入力したパスワードの一致チェックをする方法
会員登録フォームで、2回入力したパスワードが一致しているかをリアルタイムでチェックする方法を紹介します。このサンプルでは、パスワードと確認用パスワードの2つの入力欄を用意し、どちらかへ文字を入力するたびにJavaScriptで内容を比較します。2つの入力内容が異なる場合はエラーメッセージを表示し、同じ内容になると一致していることをメッセージで知らせます。
パスワードを2回入力する形式は、会員サイトの新規登録画面やアカウント作成画面などで利用できます。確認用の入力欄を設けて一致チェックを行うことで、利用者が最初の入力欄とは異なる文字列を入力していることをその場で確認できます。このサンプルでは確認ボタンを押す必要がなく、文字を入力・削除するたびに判定結果が更新されるため、入力途中でも状態を確認できます。
HTMLでは2つのパスワード入力欄と判定結果の表示領域を作成し、CSSでは入力欄や一致・不一致メッセージのデザインを設定します。JavaScriptでは2つの入力値を比較し、未入力・不一致・一致の3つの状態に応じて表示内容を切り替えます。フォームの横幅や余白、入力欄の角丸、メッセージの色などはCSSから変更でき、画面幅が640px以下の場合は余白を小さくするレスポンシブ対応も行っています。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
2回入力したパスワードが一致しているかチェックします。
2つのパスワード欄へ入力してください。入力内容が異なる場合は不一致、一致した場合は一致していることがリアルタイムで表示されます。
コードをコピーして使おう!
<!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="password-match-check-form_wrap">
<!-- タイトル -->
<div class="password-match-check-form_title">
会員登録フォーム
</div>
<!-- 説明文 -->
<p class="password-match-check-form_text">
2回入力したパスワードが一致しているかチェックします。
</p>
<!-- パスワード入力欄 -->
<div class="password-match-check-form_fields">
<!-- 1回目のパスワード -->
<div class="password-match-check-form_field">
<label
class="password-match-check-form_label"
for="password-match-check-form-password">
パスワード
</label>
<input
class="password-match-check-form_input"
type="password"
id="password-match-check-form-password"
name="password"
placeholder="パスワードを入力">
</div>
<!-- 確認用パスワード -->
<div class="password-match-check-form_field">
<label
class="password-match-check-form_label"
for="password-match-check-form-confirm">
パスワード確認
</label>
<input
class="password-match-check-form_input"
type="password"
id="password-match-check-form-confirm"
name="confirm_password"
placeholder="もう一度入力"
aria-describedby="password-match-check-form-message">
</div>
</div>
<!-- 一致チェックの結果 -->
<p
class="password-match-check-form_message"
id="password-match-check-form-message"
aria-live="polite">
パスワードを入力してください。
</p>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでパスワードと確認用パスワードの2つの入力欄を配置し、CSSでフォームと判定メッセージをデザインします。JavaScriptでは2つの入力欄を監視し、文字が入力・削除されるたびに内容を比較して、未入力・不一致・一致の状態を表示します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlは会員登録フォームの表示部分を構成するファイルです。パスワードと確認用パスワードの2つの入力欄、判定結果を表示する領域を配置しています。入力欄はtype="password"を使用しているため、入力した文字はパスワード入力として表示されます。
style.cssはフォーム全体、ラベル、パスワード入力欄、判定メッセージのデザインを設定するファイルです。不一致の場合はis-error、一致した場合はis-successのスタイルが適用されます。
script.jsは2つのパスワードを比較するファイルです。両方の入力欄へinputイベントを設定し、入力内容が変化するたびに一致チェックを実行します。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3ファイルを同じ階層へ保存し、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssとscript.jsを読み込む構成になっているため、そのまま一致チェックを試せます。2つの入力欄へパスワードを入力すると、入力するたびに判定結果が更新されます。
JavaScriptでは最初に2つの入力値を取得します。どちらか一方でも空文字""の場合は「パスワードを入力してください。」と表示します。両方に文字が入力されるとpassword!==confirmで文字列を比較し、異なる場合は「パスワードが一致していません。」、完全に同じ場合は「パスワードが一致しています。」と表示します。
比較は文字列をそのまま判定するため、大文字と小文字も区別されます。たとえばSample123とSample123は一致しますが、Sample123とsample123は一致しません。このサンプルで確認するのは2つの入力内容が同じかどうかだけで、パスワードの文字数や強度は判定していません。
カスタマイズできる内容
index.htmlでは「会員登録フォーム」のタイトル、説明文、2つのラベル、プレースホルダーを変更できます。style.cssではフォーム全体の横幅、余白、背景色、枠線、角丸、入力欄のデザイン、一致・不一致メッセージの色などを変更できます。script.jsでは未入力、不一致、一致の場合に表示するメッセージを変更できます。
数値調整
style.css
max-width:520px;
フォーム全体の最大横幅です。値を大きくするとフォームが横に広がり、小さくするとコンパクトになります。
margin:40px auto;
フォーム全体の上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。
padding:32px;
フォーム全体の内側余白です。値を大きくすると内容と外枠の間隔が広がります。
border-radius:18px;
フォーム全体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
gap:16px;
2つのパスワード入力項目の間隔です。値を大きくすると入力項目同士の間隔が広がります。
gap:8px;
ラベルとパスワード入力欄の間隔です。値を大きくするとラベルと入力欄が離れます。
padding:14px 16px;
パスワード入力欄の内側余白です。上下の14pxで入力欄の高さ、左右の16pxで文字と枠線の間隔を調整できます。
border-radius:10px;
パスワード入力欄の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
transition:0.3s;
フォーカス時に枠線と影が切り替わる時間です。値を大きくするとゆっくり、小さくすると速く変化します。
min-height:22px;
判定メッセージ領域の最小高さです。値を大きくするとメッセージ領域の高さが広がります。
margin:18px 0 0;
判定メッセージの上側余白です。18pxを大きくすると入力欄との間隔が広がります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssでフォーム全体へwidth:100%とmax-width:520pxを設定しているため、画面幅に合わせてフォームが縮小されます。また、画面幅640px以下ではpadding:24px 18px;へ変更して内側余白を小さくしているため、スマートフォン・タブレット・PCで利用できます。
コメント