278 votes

Retourner la chaîne sans le slash de fin

J'ai deux variables :

site1 = "www.somesite.com";  
site2 = "www.somesite.com/";  

Je veux faire quelque chose comme ceci

function someFunction(site)
{
    // If the var has a trailing slash (like site2), 
    // remove it and return the site without the trailing slash
    return no_trailing_slash_url;
}

Comment dois-je m'y prendre ?

1 votes

619voto

Chandu Points 40028

Essayez ça :

function someFunction(site)     
{     
    return site.replace(/\/$/, "");
}

165 votes

Pour gérer les cas avec plusieurs barres obliques de fin, vous pouvez utiliser : return site.replace(/\/+$/, "");

18 votes

"/".replace(/\/$/, "") sera "". "/" est un chemin d'accès valide et ne doit pas être supprimé.

4 votes

Soyez prudent avec /\/+$/ Il s'agit d'un commentaire qui a été approuvé 150 fois à l'heure où j'écris ces lignes. Il est soumis à ReDoS. Cela n'a pas d'importance dans de nombreux cas, mais pourrait être un gros problème si vous l'utilisez (par exemple) dans du code Node.js côté serveur.

88voto

ThiefMaster Points 135805
function stripTrailingSlash(str) {
    if(str.substr(-1) === '/') {
        return str.substr(0, str.length - 1);
    }
    return str;
}

Remarque : IE8 et les versions antérieures ne prennent pas en charge les décalages de substrats négatifs. Utilisez str.length - 1 à la place si vous devez prendre en charge ces anciens navigateurs.

1 votes

J'aime beaucoup l'utilisation du terme "ancien" ici.

0 votes

Function stripTrailingSlash(str) { if(str.startsWith("/")) { return str.substr(1, str.length - 1) ; } return str ; } } PAS POUR IE8... qui utilise IE8 de toute façon ?

34voto

ChronosLLC Points 140

J'utiliserais une expression régulière :

function someFunction(site)
{
// if site has an end slash (like: www.example.com/),
// then remove it and return the site without the end slash
return site.replace(/\/$/, '') // Match a forward slash / at the end of the string ($)
}

Vous devez vous assurer que la variable site est une chaîne, cependant.

3 votes

Je suis tout à fait d'accord, chaque fois que vous écrivez une expression rationnelle, elle doit être intégrée dans une fonction avec un nom descriptif ou avec des commentaires.

2voto

Martin Barker Points 1325

La méthode la plus simple que je connaisse est la suivante :

function stripTrailingSlash(str){
   if(str.charAt(str.length-1) == "/"){ str = str.substr(0, str.length - 1);}
   return str
}

Mise à jour de la version ES2015.

const stripTrailingSlash = str=>str.charAt(str.length-1)=="/"?str.substr(0,str.length-1):str;

Il vérifiera alors s'il y a un / à l'extrémité et s'il y en a un, il l'enlèvera. Si ce n'est pas le cas, elle vous rendra votre chaîne telle qu'elle était.

Correction du calcul de l'index basé sur zéro sur la chaîne de caractères.

EDITAR: Comme il y avait un commentaire à une réponse, il y en a maintenant d'autres qui font la même chose n'utilisez pas sub string pour une comparaison, vous créez une toute nouvelle chaîne en mémoire (au bas niveau) quand vous pouvez utiliser charAt pour obtenir un seul caractère, il y a beaucoup moins de mémoire pour faire votre comparaison, Javascript est toujours JIT et ne peut pas faire les optimisations au niveau de n'importe quel langage, bien qu'un compilateur puisse le faire, il ne réparera pas cela pour vous.

-13voto

josh.trow Points 3303
function someFunction(site) {
  if (site.indexOf('/') > 0)
    return site.substring(0, site.indexOf('/'));
  return site;
}

2 votes

subtring ? En plus de cela, il supprime la première barre oblique et tout ce qui la suit.

0 votes

@ThiefMaster : Vraiment ? Tu ne peux pas dire que je voulais dire substring ? En outre, je voulais supprimer la première barre oblique et tout ce qui la suit, car elle répond à la question et aux données d'exemple postées.

0 votes

Son commentaire dit qu'il veut enlever la barre oblique de fin de ligne.

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