Estoy trabajando en una aplicación en CodeIgniter, y estoy tratando de hacer que un campo en un formulario genere dinámicamente el slug URL. Lo que me gustaría hacer es eliminar la puntuación, convertirla a minúsculas y reemplazar los espacios con guiones. Entonces, por ejemplo, Shane's Rib Shack se convertiría en shanes-rib-shack.
Esto es lo que tengo hasta ahora. La parte en minúscula fue fácil, pero el reemplazo no parece estar funcionando en absoluto, y no tengo idea de eliminar la puntuación:
$("#Restaurant_Name").keyup(function(){
var Text = $(this).val();
Text = Text.toLowerCase();
Text = Text.replace('/\s/g','-');
$("#Restaurant_Slug").val(Text);
});
javascript
jquery
regex
GSto
fuente
fuente
Respuestas:
No tengo idea de dónde vino el término 'slug', pero aquí vamos:
El primer reemplazo cambiará los espacios a guiones, el segundo reemplazo elimina todo lo que no sea alfanumérico, guión bajo o guión.
Si no quieres que las cosas "como - esto" se conviertan en "como --- esto", entonces puedes usar esta:
Eso eliminará guiones (pero no espacios) en el primer reemplazo, y en el segundo reemplazo condensará espacios consecutivos en un solo guión.
Entonces "like - this" aparece como "like-this".
fuente
text.toLowerCase().replace(/ /g,'-').replace(/[-]+/g, '-').replace(/[^\w-]+/g,'');
lugar de la opción 2. La opción 2 cambiará "th - is" a "this".e intenta
original por: http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
EDITAR: extendido para caracteres más específicos del idioma:
fuente
ü
debe sustituirseue
, etc.å
embargo, falta el escandinavo .İĞŞığş
afrom
variables y convertirlasIGSigs
para admitir caracteres turcos.En primer lugar, las expresiones regulares no deben tener comillas circundantes, por lo que '/ \ s / g' debería ser / \ s / g
Para reemplazar todos los caracteres no alfanuméricos con guiones, esto debería funcionar (usando su código de ejemplo):
Eso debería hacer el truco...
fuente
Encontré una buena y completa solución para el inglés
Algunos ejemplos de ello en uso:
Gracias a Andrew Stewart
fuente
Espero que esto pueda salvar el día de alguien ...
fuente
Todo lo que necesitabas era un plus :)
fuente
Eche un vistazo a esta función slug para desinfectar las URL, desarrollada por Sean Murphy en https://gist.github.com/sgmurphy/3095196
fuente
Creo un complemento para implementar en la mayoría de los idiomas: http://leocaseiro.com.br/jquery-plugin-string-to-slug/
Uso predeterminado:
Es muy fácil tiene stringToSlug jQuery Plugin
fuente
* basado en https://gist.github.com/mathewbyrne/1280286
ahora puedes transformar esta cadena:
dentro:
aplicando a su código:
fuente
La combinación de una variedad de elementos de las respuestas aquí con normalizar proporciona una buena cobertura. Mantenga el orden de las operaciones para limpiar gradualmente la url.
normlize('NFD')
divide los caracteres acentuados en sus componentes, que son letras básicas más signos diacríticos (la parte de acento).replace(/[\u0300-\u036f]/g, "")
purga todos los signos diacríticos, dejando las letras básicas por sí mismas. El resto se explica con comentarios en línea.fuente
Puedes usar tu propia función para esto.
pruébalo: http://jsfiddle.net/xstLr7aj/
fuente
La respuesta aceptada no satisfizo mis necesidades (permite guiones bajos, no maneja guiones al principio y al final, etc.), y las otras respuestas tenían otros problemas que no se adaptaban a mi caso de uso, así que aquí está la función slugify Se me ocurrio:
Esto convertirá 'foo !!! BAR _-_-_ baz-' (tenga en cuenta el espacio al principio) en
foo-bar-baz
.fuente
Es posible que desee echar un vistazo al complemento speakURL y luego simplemente podría:
fuente
Otro más. Corto y mantiene caracteres especiales:
imaginação é mato => imaginacao-e-mato
fuente
Método de generación de babosa más potente en JavaScript puro. Básicamente es compatible con la transliteración de todos los caracteres cirílicos y muchos Umlauts (alemán, danés, Francia, turco, ucraniano, etc.), pero se puede ampliar fácilmente.
fuente
Para personas que ya usan
lodash
La mayoría de estos ejemplos son realmente buenos y cubren muchos casos. Pero si 'sabes' que solo tienes texto en inglés, aquí está mi versión que es muy fácil de leer :)
_.words(_.toLower(text)).join('-')
fuente
Bueno, después de leer las respuestas, se me ocurrió esta.
fuente
Nota: si no le importa un argumento en contra de la respuesta aceptada y solo está buscando una respuesta, omita la siguiente sección, encontrará mi respuesta propuesta al final
la respuesta aceptada tiene algunos problemas (en mi opinión):
1) en cuanto al primer fragmento de función:
no tiene en cuenta los espacios en blanco múltiples consecutivos
entrada:
is it a good slug
recibido:
---is---it---a---good---slug---
esperado:
is-it-a-good-slug
sin consideración por múltiples guiones consecutivos
entrada:
-----is-----it-----a-----good-----slug-----
recibido:
-----is-----it-----a-----good-----slug-----
esperado:
is-it-a-good-slug
tenga en cuenta que esta implementación no maneja guiones externos (o espacios en blanco), ya sea que sean múltiples consecutivos o caracteres singulares que (por lo que entiendo, las babosas y su uso) no son válidos
2) en cuanto al segundo fragmento de función:
se ocupa de los espacios en blanco múltiples consecutivos al convertirlos en simples,
-
pero eso no es suficiente ya que los espacios en blanco externos (al inicio y al final de la cadena) se manejan de la misma manera, poris it a good slug
lo que volvería-is-it-a-good-slug-
También elimina por completo guiones de la entrada que convierte algo parecido
--is--it--a--good--slug--'
aisitagoodslug
, el fragmento en el comentario de @ Ryan-Allen se encarga de eso, dejando a los guiones exteriores problema, aunque sin resolverahora sé que no hay una definición estándar para las babosas, y la respuesta aceptada puede hacer el trabajo (que estaba buscando el usuario que publicó la pregunta), pero esta es la pregunta SO más popular sobre las babosas en JS, por lo que esos problemas tenía que ser señalado, también (¡con respecto a hacer el trabajo! ) imagine escribir esta abominación de una URL (
www.blog.com/posts/-----how-----to-----slugify-----a-----string-----
) o incluso ser redirigido a ella en lugar de algo como (www.blog.com/posts/how-to-slugify-a-string
), sé que este es un caso extremo, pero bueno, eso es lo que prueba son para.Una mejor solución , en mi opinión, sería la siguiente:
ahora es probable que haya un ninja RegExp que pueda convertir esto en una expresión de una sola línea, no soy un experto en RegExp y no estoy diciendo que esta sea la mejor solución o la más compacta o la que tenga el mejor rendimiento pero espero que pueda hacer el trabajo.
fuente
Este codigo esta funcionando
fuente
¡Esto me ayudó con el mismo problema!
fuente
Esto me funciona bien.
Lo encontré en CodeSnipper
fuente
fuente