Estou trabalhando em um aplicativo no CodeIgniter e estou tentando criar um campo em um formulário para gerar dinamicamente a lesma de URL. O que eu gostaria de fazer é remover a pontuação, convertê-la em minúscula e substituir os espaços por hífens. Assim, por exemplo, o Rib Shack de Shane se tornaria shanes-rib-shack.
Aqui está o que eu tenho até agora. A parte em minúscula foi fácil, mas a substituição não parece estar funcionando e não faço ideia de remover a pontuação:
$("#Restaurant_Name").keyup(function(){
var Text = $(this).val();
Text = Text.toLowerCase();
Text = Text.replace('/\s/g','-');
$("#Restaurant_Slug").val(Text);
});
javascript
jquery
regex
GSto
fonte
fonte
Respostas:
Não faço ideia de onde veio o termo 'lesma', mas aqui vamos nós:
A primeira substituição altera os espaços para hífens; a segunda substituição remove qualquer coisa que não seja alfanumérica, sublinhada ou hífen.
Se você não quer coisas "como - isto" se transformando em "como --- isto", então você pode usar este:
Isso removerá hífens (mas não espaços) na primeira substituição e, na segunda substituição, condensará espaços consecutivos em um único hífen.
Então "like - this" sai como "like-this".
fonte
text.toLowerCase().replace(/ /g,'-').replace(/[-]+/g, '-').replace(/[^\w-]+/g,'');
vez da opção 2. A opção 2 mudará "th - is" para "this".e tentar
original por: http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
EDIT: estendido para mais caracteres específicos do idioma:
fonte
ü
deve ser substituído porue
, etc.å
embora.İĞŞığş
àfrom
variável e convertê-la emIGSigs
para suportar caracteres turcos.Antes de tudo, expressões regulares não devem conter aspas, portanto '/ \ s / g' deve ser / \ s / g
Para substituir todos os caracteres não alfanuméricos por traços, isso deve funcionar (usando seu código de exemplo):
Isso deve fazer o truque ...
fonte
Encontrei uma solução boa e completa para o inglês
Alguns exemplos disso em uso:
Agradecimentos a Andrew Stewart
fonte
Espero que isso possa salvar o dia de alguém ...
fonte
Tudo o que você precisava era de um plus :)
fonte
Dê uma olhada nesta função slug para limpar URLs, desenvolvida por Sean Murphy em https://gist.github.com/sgmurphy/3095196
fonte
Eu crio um plugin para implementar na maioria dos idiomas: http://leocaseiro.com.br/jquery-plugin-string-to-slug/
Uso padrão:
É muito fácil tem o plugin jQuery stringToSlug
fonte
*baseado em https://gist.github.com/mathewbyrne/1280286
agora você pode transformar esta string:
para dentro:
aplicando ao seu código:
fonte
Combinar uma variedade de elementos das respostas aqui com normalizar fornece uma boa cobertura. Mantenha a ordem das operações para limpar incrementalmente o URL.
normlize('NFD')
quebra os caracteres acentuados em seus componentes, que são letras básicas e sinais diacríticos (a parte de acentuação).replace(/[\u0300-\u036f]/g, "")
limpa todos os diacríticos, deixando as letras básicas por si só. O restante é explicado com comentários embutidos.fonte
Você pode usar sua própria função para isso.
tente: http://jsfiddle.net/xstLr7aj/
fonte
A resposta aceita não atendeu às minhas necessidades (permite sublinhados, não processa hífens no começo e no fim etc.) e as outras respostas tiveram outros problemas que não se adequavam ao meu caso de uso, então aqui está a função slugify Eu vim com:
Isso transformará 'foo !!! BAR _-_-_ baz-' (observe o espaço no começo) em
foo-bar-baz
.fonte
Você pode dar uma olhada no plug - in speakingURL e então você pode:
fonte
Mais um. Curto e mantém caracteres especiais:
imaginação é mato => imaginação-e-mato
fonte
Método de geração de lesmas mais poderoso em JavaScript puro. É basicamente suporte à transliteração para todos os caracteres cirílicos e muitos trema (alemão, dinamarquês, França, turco, ucraniano e etc.), mas pode ser facilmente estendido.
fonte
Para pessoas que já usam
lodash
A maioria desses exemplos é realmente boa e cobre muitos casos. Mas se você 'sabe' que só tem texto em inglês, aqui está minha versão super fácil de ler :)
_.words(_.toLower(text)).join('-')
fonte
Bem, depois de ler as respostas, eu vim com essa.
fonte
Nota: se você não se importa com um argumento contra a resposta aceita e está apenas procurando uma resposta, pule a próxima seção, você encontrará minha resposta proposta no final
a resposta aceita tem alguns problemas (na minha opinião):
1) quanto ao primeiro trecho de função:
sem consideração por vários espaços em branco consecutivos
entrada:
is it a good slug
recebido:
---is---it---a---good---slug---
esperado:
is-it-a-good-slug
sem consideração por múltiplos traços consecutivos
entrada:
-----is-----it-----a-----good-----slug-----
recebido:
-----is-----it-----a-----good-----slug-----
esperado:
is-it-a-good-slug
observe que esta implementação não trata de traços externos (ou espaços em branco), sejam eles múltiplos consecutivos ou caracteres singulares que (tanto quanto eu entendo slugs e seu uso) não são válidos
2) quanto ao segundo trecho de função:
ele cuida dos vários espaços em branco consecutivos convertendo-os em simples,
-
mas isso não é suficiente, pois os espaços em branco externos (no início e no final da string) são tratados da mesma maneirais it a good slug
, retornando-is-it-a-good-slug-
ele também remove traços completamente a partir da entrada que converte algo como
--is--it--a--good--slug--'
aisitagoodslug
, o trecho no comentário por @ ryan-allen cuida de que, deixando os traços exteriores emitir embora sem soluçãoagora eu sei que não há definição padrão para slugs, e a resposta aceita pode fazer o trabalho (que o usuário que postou a pergunta estava procurando), mas esta é a pergunta SO mais popular sobre slugs no JS, então esses problemas tinha que ser apontado, também (a respeito de fazer o trabalho! ) imagine digitar essa abominação de um URL (
www.blog.com/posts/-----how-----to-----slugify-----a-----string-----
) ou até mesmo ser redirecionado para ele em vez de algo como (www.blog.com/posts/how-to-slugify-a-string
), eu sei que esse é um caso extremo, mas é isso que testes são para.uma solução melhor , na minha opinião, seria a seguinte:
agora provavelmente existe um ninja RegExp por aí que pode converter isso em uma expressão de uma linha, não sou especialista em RegExp e não estou dizendo que esta é a melhor ou mais compacta solução ou aquela com o melhor desempenho mas espero que possa fazer o trabalho.
fonte
Este código está funcionando
fonte
Isso me ajudou com o mesmo problema!
fonte
isso funciona para mim bem.
Encontrado no CodeSnipper
fonte
fonte