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

JavaScriptでURL文字列が絶対URLか相対URLかを判定する方法

Web開発では、渡された文字列が絶対URL(スキームから始まる完全なアドレス)なのか、相対URL(パスのみのアドレス)なのかを判別したい場面があります。

この判定を行う最もシンプルで確実な方法は、正規表現(RegExp)を使うことです。URLが https:// または https:// で始まっているかどうかをチェックすることで、絶対URLかどうかを判断できます。

使用する正規表現

以下の正規表現パターンを使用します。

/^https?:\/\//i

このパターンの意味は次のとおりです。

  • ^:文字列の先頭にマッチさせる
  • https?http または https にマッチ(s? は「sがあってもなくてもよい」を意味)
  • :\/\/:直後に :// が続くことを確認
  • iフラグ:大文字・小文字を区別しない

サンプルコード

実際に2つのURL文字列を判定してみましょう。

const regularExpressionForURL = /^https?:\/\//i;

const originalURL1 = "https://www.example.com/index"; // 絶対URL
const originalURL2 = "/index";                        // 相対URL

if (regularExpressionForURL.test(originalURL1)) {
    console.log("これは絶対URLです");
} else {
    console.log("これは相対URLです");
}

if (regularExpressionForURL.test(originalURL2)) {
    console.log("これは絶対URLです");
} else {
    console.log("これは相対URLです");
}

test() メソッドは、文字列が正規表現パターンに一致すれば true、一致しなければ false を返します。その結果をもとに、絶対URL・相対URLを振り分けています。

プログラムの実行方法

上記のコードをファイル(例:demo266.js)として保存し、Node.js環境で以下のコマンドを実行します。

node demo266.js

実行結果

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

PS C:\Users\Amit\javascript-code> node demo266.js
これは絶対URLです
これは相対URLです

https://www.example.com/indexhttps:// で始まるため絶対URLと判定され、/index はスキームを持たないため相対URLと判定されました。

まとめ

正規表現 /^https?:\/\//itest() メソッドを組み合わせることで、URL文字列が絶対URLか相対URLかを簡単かつ高速に判定できます。フォームのバリデーションやリンク処理など、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。

  1. JavaScriptで文字列を検索する方法【search()メソッドの使い方を解説】

    JavaScriptで文字列を検索する方法 JavaScriptで文字列の中から特定の文字列を探すには、search()メソッドを使用します。このメソッドは、引数に渡した文字列(または正規表現)が対象の文字列内で最初に一致した位置(インデックス)を返し、見つからなかった場合は -1 を返します。 以下は、JavaScriptで文字列を検索するサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8" />

  2. 文字列をJavaScriptオブジェクトに変換する方法【JSON.parse()の使い方】

    JavaScriptでJSON形式の文字列をオブジェクトに変換するには、JSON.parse()メソッドを使用します。このメソッドは、引数に渡された文字列を解析(パース)し、対応するJavaScriptオブジェクトを返します。 サンプルコード <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-width, initial-scale=1.0 /> <title>Docum