3 votes

Expression régulière en javascript pour ajouter le protocole à la chaîne url

J'ai une application pour lister les détails d'un site web en utilisant JavaScript. Il y aura un lien vers le site Web qui est généré par JavaScript lui-même. Parfois, j'obtiendrai mon lien comme,

<a href="http://www.google.com">Website</a>

Mais parfois, ça le sera,

<a href="www.yahoo.com">Website</a>

La deuxième fois, la liaison ne fonctionne pas, il n'y a pas de protocole.

Je cherche donc une fonction d'expression régulière JavaScript pour ajouter http:// s'il n'y a pas de protocole.

Mon code ressemble à ça,

var website_link = document.createElement("a"); 
website_link.innerHTML = "Website"; 
website_link.href = my_JSON_object.website;
website_link.target = "_blank"; 
profile.appendChild(website_link); 

Et aucun lien local ne viendra.

10voto

ostapische Points 516

Voir ce lien.

function setHttp(link) {
    if (link.search(/^http[s]?\:\/\//) == -1) {
        link = 'http://' + link;
    }
    return link;
}
alert(setHttp("www.google.com"));
alert(setHttp("http://www.google.com/"));  

Dans votre code ce sera comme :

var website_link = document.createElement("a"); 
website_link.innerHTML = "Website";
if (my_JSON_object.website.search(/^http[s]?\:\/\//) == -1) {
    my_JSON_object.website = 'http://' + my_JSON_object.website;
}
website_link.href = my_JSON_object.website;
website_link.target = "_blank"; 
profile.appendChild(website_link);

1voto

mishik Points 7141

Par exemple, en utilisant anticipation négative :

your_string.replace(/href="(?!http)/, 'href="http://');

Exemple :

> '<a href="www.yahoo.com">Website</a>'.replace(/href="(?!http)/, 'href="http://');
"<a href="http://www.yahoo.com">Website</a>"
> '<a href="http://www.yahoo.com">Website</a>'.replace(/href="(?!http)/, 'href="http://');
"<a href="http://www.yahoo.com">Website</a>"

1voto

wizardzloy Points 348

J'ai intégré cette fonctionnalité dans le module NPM url-schemify :

var schemify = require('url-schemify');
var assert = require('assert');

// url-schemify adds default scheme (http) to the URLs that miss it

assert.equal(schemify('google.com'), 'http://google.com');
assert.equal(schemify('www.example.com'), 'http://www.example.com');

// default scheme could be configured through the options parameter

assert.equal(schemify('google.com', { scheme: 'https' }), 'https://google.com');
// { scheme: '' } will produce protocol-related URL
assert.equal(schemify('www.example.com', { scheme: '' }), '//www.example.com');

// url-schemify doesn't modify URLs that already have scheme or protocol-related ones:

assert.equal(schemify('http://google.com'), 'http://google.com');
assert.equal(schemify('https://www.example.com'), 'https://www.example.com');
assert.equal(schemify('ftp://example.com'), 'ftp://example.com');
assert.equal(schemify('//example.com'), '//example.com');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X