Averiguar si una URL es absoluta o relativa en Javascript

Cuando se recibe una URL en una web, suele ser necesario poder detectar si se trata de una URL es absoluta o relativa para actuar en consecuencia. Una ruta absoluta es aquella que contiene toda la ruta entera hasta el objeto al cual se quiere acceder y puede contener el protocolo al principio. En cambio una ruta relativa, sólo contiene la ruta al objeto, partiendo de la ruta actual desde donde se le referencia. Por ejemplo, si es relativa puede que interese concatenar al resto de la ruta. Así que vamos a ver cómo distinguir por código la diferenciación de ruta relativa y absoluta.Si sólo se quiere comprobar para el protocolo http o https, se puede hacer de manera rápida, sencilla y eficiente con la siguiente comprobación.

if (urlString.indexOf('http://') === 0 || urlString.indexOf('https://') === 0)

De esta forma, si se cumple alguna de las dos condiciones, será una url relativa.

Por otro lado, si se desea una solución más universal, que pueda utilizarse con cualquier protocolo, en el sentido amplio de ruta absoluta o ruta relativa, se debe recurrir a una expresión regular.
La expresión regular sería la siguiente:

var r = new RegExp('^(?:[a-z]+:)?//', 'i');

Esta expresión regular es más universal, independiente del protocolo y, con la ‘i’ del segundo parámetro, se le indica que no distinga entre mayúsculas y minúsculas. Esta expresión regular es la que define la estructura inicial de una ruta o URL absoluta.
La explicación de cada uno de los elementos de la expresión regular utilizada (^(?:[a-z]+:)?//) es la siguiente:

  • ^ – comienzo de la cadena
  • (?: – comienzo del grupo
  • [a-z]+ – cualquier caracter entre ‘a’ y ‘z’, 1 ó más veces (+)
  • : – cadena
  • )? – fin del grupo, el cual puede aparecer una o ninguna vez
  • // – cadena (dos barras)
  • parámetro ‘i’ – no distinguir entre mayúsculas y minúsculas

A continuación, varios ejemplos de la utilización de la expresión regular para averiguar si una ruta o URL es absoluta o relativa en JavaScript, devolviendo true si es absoluta y false si es relativa.

r.test('http://ejemplo.com'); // true - URL absoluta típica del protocolo http
r.test('HTTP://EJEMPLO.COM'); // true - URL absoluta del protocolo http en mayúsculas
r.test('https://www.ejemplo.com'); // true - URL absoluta del protocolo https (secure http)
r.test('ftp://ejemplo.com/fichero.txt'); // true - URL absoluta, protocolo FTP (file transfer protocol)
r.test('//cdn.ejemplo.com/lib.js'); // true - URL absoluta, relativa al protocolo
r.test('/directorio/prueba.txt'); // false - URL relativa
r.test('test'); // false - URL relativa

Deja un comentario

Pin It on Pinterest