JavaScript Validation API
1. 制約バリデーション の DOM メソッド
JavaScriptのバリデーション APIは、ブラウザに組み込まれた制約バリデーション機能をプログラムから制御するための強力なインターフェースを提供します。
| メソッド | 説明 |
|---|---|
| checkValidity() | インプット要素が有効なデータを含んでいる場合に true を返します。 |
| setCustomValidity() | インプット要素の validationMessage プロパティにカスタムメッセージを設定します。 |
1.1 checkValidity() メソッドの実装例
インプット要素が無効なデータを含んでいる場合に、ブラウザ標準のメッセージを表示する基本的な実装です。
<input id="id1" type="number" min="100" max="300" required>
<button onclick="myFunction()">実行</button>
<p id="demo"></p>
<script>
function myFunction() {
const inpObj = document.getElementById("id1");
// バリデーションチェックの実行
if (!inpObj.checkValidity()) {
// 無効な場合、ブラウザ標準のバリデーションメッセージを表示
document.getElementById("demo").innerHTML = inpObj.validationMessage;
} else {
document.getElementById("demo").innerHTML = "入力値は有効です";
}
}
</script>2. 制約バリデーションの DOM プロパティ
バリデーションの状態を確認するために、以下のプロパティが利用可能です。
| プロパティ | 説明 |
|---|---|
| validity | インプット要素の妥当性に関連するブーリアン(真偽値)プロパティを含むオブジェクトです。 |
| validationMessage | 要素のバリデーションが false の時にブラウザが表示するメッセージを保持します。 |
| willValidate | その要素がバリデーションの対象になるかどうかを示します。 |
2.1 Validity プロパティの詳細
インプット要素の validity プロパティ(ValidityState オブジェクト)には、データの妥当性に関する詳細なフラグが含まれています。
| プロパティ | 説明 |
|---|---|
| customError | setCustomValidity() でカスタムメッセージが設定されている場合に true となります。 |
| patternMismatch | 要素の値が pattern 属性の正規表現と一致しない場合に true となります。 |
| rangeOverflow | 要素の値が max 属性で指定された最大値を超えている場合に true となります。 |
| rangeUnderflow | 要素の値が min 属性で指定された最小値を下回っている場合に true となります。 |
| stepMismatch | 要素の値が step 属性で定義されたルールに適合しない場合に true となります。 |
| tooLong | 要素の値が maxLength 属性で指定された最大文字数を超えている場合に true となります。 |
| typeMismatch | 要素の値が type 属性(emailやurlなど)に適合しない場合に true となります。 |
| valueMissing | required 属性がある要素に値が入力されていない場合に true となります。 |
| valid | 要素の値がすべての制約を満たし、有効である場合に true となります。 |
3. 具体的な実装コード例
3.1 rangeOverflow プロパティの使用例
入力フィールドの数値が100(max 属性)を超えている場合に、独自のメッセージを表示します。
<input id="id1" type="number" max="100">
<button onclick="myFunction()">チェック</button>
<p id="demo"></p>
<script>
function myFunction() {
let text = "値は有効です(Value OK)";
// rangeOverflow(最大値超過)を個別に判定
if (document.getElementById("id1").validity.rangeOverflow) {
text = "数値が大きすぎます(Value too large)";
}
document.getElementById("demo").innerHTML = text;
}
</script>3.2 rangeUnderflow プロパティの使用例
入力フィールドの数値が100(min 属性)を下回っている場合にメッセージを表示します。
<input id="id1" type="number" min="100">
<button onclick="myFunction()">チェック</button>
<p id="demo"></p>
<script>
function myFunction() {
let text = "値は有効です(Value OK)";
// rangeUnderflow(最小値未満)を個別に判定
if (document.getElementById("id1").validity.rangeUnderflow) {
text = "数値が小さすぎます(Value too small)";
}
document.getElementById("demo").innerHTML = text;
}
</script>