入力バリデーション
checkValidity setCustomValidity Constraint Validation API
ブラウザの組み込みバリデーション機能とJavaScriptによるカスタムバリデーションを組み合わせます。
デモ:バリデーション付きフォーム
コード例:Constraint Validation API
js
const input = document.querySelector('#email');
// バリデーション確認
input.checkValidity(); // true / false
input.validity.valid; // true / false
input.validity.valueMissing; // required なのに空
input.validity.typeMismatch; // type に合わない値
input.validity.patternMismatch; // pattern に合わない
input.validity.tooShort; // minlength より短い
input.validity.tooLong; // maxlength より長い
input.validity.rangeUnderflow; // min より小さい
input.validity.rangeOverflow; // max より大きい
// カスタムエラーメッセージを設定
input.setCustomValidity(''); // クリア(有効にする)
input.setCustomValidity('このメールは既に使用されています'); // エラー設定
// フォーム全体のバリデーション
const form = document.querySelector('form');
form.checkValidity(); // 全フィールドをチェック
form.reportValidity(); // チェックしてエラーを表示
// invalid イベント(バリデーション失敗時)
input.addEventListener('invalid', (e) => {
e.preventDefault(); // デフォルトのエラーバルーンを抑制
showCustomError(input.validationMessage);
});
// input イベントでリアルタイムバリデーション
input.addEventListener('input', () => {
if (input.value.includes('@')) {
input.setCustomValidity('');
} else {
input.setCustomValidity('@が含まれていません');
}
});HTML属性によるバリデーション
js
<!-- 必須 -->
<input required>
<!-- 型バリデーション -->
<input type="email"> <!-- メール形式 -->
<input type="url"> <!-- URL形式 -->
<input type="number"> <!-- 数値のみ -->
<input type="tel"> <!-- 電話番号(形式は任意) -->
<!-- 長さ制限 -->
<input minlength="2" maxlength="50">
<!-- 数値範囲 -->
<input type="number" min="0" max="100" step="5">
<!-- 正規表現パターン -->
<input pattern="[0-9]{3}-[0-9]{4}" title="郵便番号(123-4567形式)">
<!-- バリデーションを無効化 -->
<input novalidate>
<form novalidate> <!-- フォーム全体 -->NEWcustomStateSet(カスタム状態のCSSセレクタ対応)
カスタム要素のバリデーション状態をCSSセレクタで指定できる新機能です。
js
// ElementInternals でカスタム状態を管理
class MyInput extends HTMLElement {
#internals;
constructor() {
super();
this.#internals = this.attachInternals();
}
validate(value) {
if (!value) {
this.#internals.states.add('--empty');
this.#internals.states.delete('--valid');
} else {
this.#internals.states.delete('--empty');
this.#internals.states.add('--valid');
}
// 組み込みバリデーションにも参加
this.#internals.setValidity(
{ valueMissing: !value },
!value ? '入力が必要です' : ''
);
}
}
/* CSS でカスタム状態に対応 */
my-input:state(--empty) { border-color: red; }
my-input:state(--valid) { border-color: green; }🤖 AIプロンプトテンプレート
以下の要件を満たすTypeScript + Reactコンポーネントを作成してください。 - HTML5バリデーション属性(required/minlength/pattern/type)のサンプルを示す - checkValidity()とreportValidity()を使ったプログラムによる検証の例を含める - setCustomValidity()でカスタムエラーメッセージを設定するサンプルを含める - JavaScriptによる独自バリデーションロジック(パスワード強度チェックなど)の例を示す - バリデーション結果をリアルタイムでUIに反映するサンプルを含める - コメントは日本語で記述する
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。