Javascript で URL が内部リンクであるかの判定

pjax 導入のため Javascript で取得 URL が内部リンクかどうか判定します。

内部リンクは色々な書き方がありますが、下記の場合の条件での判定です。Javascript
var url; //取得 URL
var reg = new RegExp("^(https?:)?\/\/"+document.domain);
 
if (url.match(reg) || url.charAt(0) === "/") {
  //内部リンク時の処理
}

if 内の判定が肝で、URL が内部リンクになる条件は次の3つとします。他のものでも内部リンクとなるものはあるのですが、以下の3つならばという条件で判定します。

「 http://ドメイン 」(または「 https://ドメイン 」) で始まる
「 //ドメイン 」 で始まる
「 / 」 で始まる

全て記した場合とプロトコルを省略した場合、ドメインまで、もしくはそれ以上省略した場合の3つがあり、その場合 true を返す文字列判定です。

Boolean 判定
var reg = new RegExp("^(https?:)?\/\/"+document.domain);
url.match(reg) || url.charAt(0) === "/"; //boolean

これで a タグ内の href が内部リンクかどうか判定できます。

document.domain の部分はわざわざこう書かず、自分のドメインの文字列に書き直してもらっても使えます。

追記:
ソーシャルボタン等のURLも拾ってきてしまうためコードを大幅に修正いたしました。

Top