JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで文字列が有効な16進数(HEX)コードかどうかを判定する方法

文字列が有効な16進数(HEX)コードであるためには、「0〜9」の数字と「a〜f」の英字以外の文字を含んでいない必要があります。

例えば、以下のようなケースが考えられます。

'3423ad' → 有効なHEXコード
'4234es' → 無効なHEXコード(eは有効だがsは無効な文字)

本記事では、文字列を引数として受け取り、それが有効なHEXコードかどうかを判定するJavaScript関数の実装方法を解説します。

実装例:1文字ずつ検証する方法

基本的なアプローチは、許容する文字の一覧(レジェンド)を用意し、文字列の各文字がその一覧に含まれているかを順番にチェックすることです。1つでも含まれていない文字があれば無効と判定します。

const str1 = '4234es';
const str2 = '3423ad';

const isHexValid = str => {
    const legend = '0123456789abcdef';
    for(let i = 0; i < str.length; i++){
        // 許容文字に含まれていれば次の文字へ
        if(legend.includes(str[i])){
            continue;
        }
        // 含まれていない文字があれば無効
        return false;
    }
    return true;
};

console.log(isHexValid(str1));
console.log(isHexValid(str2));

出力結果

コンソールには以下のように出力されます。

false
true

別解:正規表現を使った簡潔な方法

正規表現を使えば、同じ処理をより短く記述できます。/^[0-9a-f]+$/i というパターンで、文字列全体が0〜9およびa〜f(大文字も可)だけで構成されているかを一括判定できます。

const isHexValidRegex = str => /^[0-9a-f]+$/i.test(str);

console.log(isHexValidRegex('4234es')); // false
console.log(isHexValidRegex('3423ad')); // true
console.log(isHexValidRegex('3423AD')); // true(大文字も許可)

まとめ

  • 有効なHEXコードは「0〜9」と「a〜f」のみで構成される文字列です。
  • ループで1文字ずつ検証する方法は処理の流れが分かりやすく、初心者にも理解しやすいアプローチです。
  • 正規表現を使う方法はコードが簡潔になり、大文字小文字の扱いも柔軟に制御できます。

用途や可読性の要件に応じて、両者の方法を使い分けるとよいでしょう。

  1. 【初心者向け】JavaScriptのfor...ofループの使い方を実例つきで解説

    JavaScriptのfor...ofループは、配列、文字列、配列風オブジェクト(Array-like objects)、NodeListなど、反復可能(イテラブル)なオブジェクトの要素を先頭から順番に1つずつ取り出して処理するための構文です。 インデックスの管理が不要なため、従来のforループやforEachメソッドと比べてコードが簡潔になり、可読性や保守性が向上するというメリットがあります。 for...ofループの基本構文 for (変数 of 反復可能オブジェクト) {   // 各要素に対して実行したい処理 } サンプルコード 次の例では、for...ofループを使って文

  2. JavaScriptで正規表現を使って有効な日付形式(YYYY-MM-DD)を確認する方法

    正規表現による日付形式のチェックJavaScriptで入力された日付がYYYY-MM-DD形式として有効かどうかを確認したい場合は、正規表現(RegExp)を使うのが最もシンプルです。まず、次の正規表現パターンを定義しましょう。const dateFormat = /^\d{4}\-\d{2}\-\d{2}$/;このパターンの意味は以下の通りです。^\d{4} … 文字列の先頭が4桁の数字(年)であること\-\d{2} … ハイフンの後に2桁の数字(月)が続くこと\-\d{2}$ … ハイフンの後に2桁の数字(日)で文字列が終わることコード例<!DOCTYPE html> <