この記事の目次 開く・閉じる
今回の仕上がり
数値型の整数0〜100だけを受け付ける仕様で、12ケースを実行しました。不具合例は7件、修正例は12件が期待どおりでした。小数、文字列の「50」、空文字列、null、NaNで違いが出ています。下の作例で、二つの判定を切り替えて比較できます。
下の画面は、実際に触れる作例です。静止画で動きを再現したものではありません。
作例を別画面で開く → · サンプル一式をダウンロード(ZIP)

必要なものと、試す順番
ブラウザだけで試せます。AIサービスの登録や課金は不要です。JavaScriptの関数を読むと理解しやすくなりますが、表の入力と結果を見比べるところから始められます。
- 作例の仕様を読みます。「数値型の整数0〜100」とあり、文字列の数字は受け付けない点に注意してください。
- 「不具合のある例をテスト」を押します。7 / 12件という結果と、「不一致」の行を見ます。
- 「修正例をテスト」を押します。12 / 12件になり、不一致だった入力が拒否されることを確認します。
- 自分の機能にも同じ考え方を使います。入力、期待する結果、理由を先に書き、コードの実際の結果と比べてください。
仕組みを知る
境界の数字だけでは足りなかった
不具合例は「0未満でも100超でもなければ受け付ける」と書いています。一見、範囲を確認していますが、整数かどうかを見ていません。さらにJavaScriptの比較で型が変換される値や、大小比較がどちらも成立しないNaNも入り込みます。
今回は-1、0、1、99、100、101で端の前後を確認し、0.5、文字列、空欄に相当する値などを足しました。AIが作ったコードでも、自分で書いたコードでも、この確認は役に立ちます。なお、不具合例は編集側が用意したもので、特定のAIモデルの出力や失敗率を示してはいません。
何を受け付けるかを決めてから、関数を選ぶ
修正例はNumber.isIntegerで数値型の整数かどうかを確認し、その後に0以上100以下を調べます。MDNでは、数値ではない値、NaN、Infinityにはfalseを返すと説明されています。今回の小さな範囲に合わせた判定です。
フォームのinput.valueは文字列です。実際の入力を点数へ変えるなら、空欄を先に判定するか、数値変換の条件をどうするか、別に仕様を決めます。この記事の関数へ文字列をそのまま渡して拒否されても、関数が壊れているわけではありません。入力処理と内部データの検証を分けると、原因を追いやすくなります。
コードの要点
// 受け付ける仕様:数値型の整数0〜100
function acceptsScore(value) {
return Number.isInteger(value) && value >= 0 && value <= 100;
}
const cases = [[-1, false], [0, true], [100, true], [101, false]];
for (const [input, expected] of cases) {
console.assert(acceptsScore(input) === expected);
}上は範囲の端を確かめる抜粋です。ZIPの作例には型やNaNなどを含む12ケースがあり、画面に期待値と実際の結果を並べます。
自作のHTML・CSS・JavaScriptはCC0です。ZIP内のREADMEと、共通のサンプル利用条件をご確認ください。
できたかの確認と、よくあるつまずき
- 不具合例は7件、修正例は12件が期待どおりになる。
- 0と100は受理し、-1と101は拒否する。
- 文字列の数字を受け付ける仕様へ変えるなら、テストの期待値も理由を付けて変える。
ここに注意。テストが落ちたからといって、期待値を実際の結果に合わせるだけでは不具合が隠れます。まず仕様が正しいか読み直します。
ここに注意。12件通っても、通信、保存、認証、表示の不具合まで消えたわけではありません。機能ごとに別のテストが必要です。
出典と、確認した範囲
作例の確認日:2026年10月3日。個別の条件と未確認範囲は以下の通りです。共通の検証方法も公開しています。
編集側の自作関数をブラウザで実行して比較しました。AIモデルへの生成依頼、モデル間比較、網羅的なテスト、セキュリティ監査はしていません。
MDN:Number.isInteger — 整数と型の判定、NaNやInfinityの扱い。