Je construis des sections de nouvelles CMS avec quelques champs, mais celles nécessaires pour cette question sont les champs "titre" et "référence URL". Lorsqu'un utilisateur entre dans un titre d'article, je souhaite que JavaScript / JQuery puisse remplacer le texte du champ de titre et créer un fragment d'URL "propre" en supprimant les espaces et les caractères étranges avec un tableau de bord (-).
E.g. p>
kris 'amusant nouvel article (titre) p>
Kris-Fun-nouvel article (référence URL) p>
Voici le code, mais je ne peux pas semblent comprendre comment remplacer plusieurs espaces et caractères spéciaux p> aussi, comme dans le titre "Kris" nouveau article ", le regex devrait remplacer" Kris "" (citation " et espace) avec "kris -" (un tiret). Reconnaître essentiellement s'il y a deux caractères spéciaux à côté les uns des autres et remplacer est avec un tiret. Pas comme ça "Kris - nouvel article amusant". P> Merci d'avance p> p>
5 Réponses :
Je pense que vous voulez une classe de caractères contenant les caractères spéciaux et l'espace, vous pouvez spécifier une ou plusieurs instances de la classe de caractères comme: et remplacez ce match avec un Dash p> p>
Vous avez besoin du drapeau global - G - sur la regex et d'une sorte de quantificateur de multiples (+ = une ou plusieurs correspondances, semble ici). P>
Alors quelque chose comme remplacer (/ ['Insérer plus d'autres caractères que vous vous souciez d'ici}] + / g,' - ') code> p>
Essayez:
function slug(str) {
if (!arguments.callee.re) {
// store these around so we can reuse em.
arguments.callee.re = [/[^a-z0-9]+/ig, /^-+|-+$/g];
// the first RE matches any sequence of characters not a-z or 0-9, 1 or more
// characters, and gets replaced with a '-' the other pattern matches '-'
// at the beginning or end of a string and gets replaced with ''
}
return str.toLowerCase()
// replace all non alphanum (1 or more at a time) with '-'
.replace(arguments.callee.re[0], '-')
// replace any starting or trailing dashes with ''
.replace(arguments.callee.re[1],'');
}
slug("Kris' FUN new Article ");
// "kris-fun-new-article"
Comment ça se passe?
str = str.toLowerCase().replace(/[^a-z0-9]+/, '-');
La réponse de Samir Talwar est correcte, sauf qu'il doit y avoir un drapeau /.../g à la fin de l'expression régulière pour indiquer une correspondance globale. Sans le /.../g, seul le premier match est remplacé.
Torez, voici la version mise à jour de votre fonction: p> (désolé, samir, i J'aurais juste commenté votre réponse, sauf que je n'ai pas encore suffisamment de points de réputation.) p> p>
Si vous avez des personnages indésirables au début et / ou à la fin du titre, vous vous retrouverez avec un caractère de fuite ou de premier plan. Avec une ligne de remplacement de texte d'expression régulière supplémentaire comme ci-dessous: ref = ref6Place (/ (^ - | - $) / g, ''); code> Tout personnage "- '" - "sera dépouillé et faire le nettoyant URL.