2016-04-11 6 views
2

Пользователь вводит их текст в #title, а JQuery преобразует строку и помещает ее во входное поле с именем #url. Следующий код работает:Замена специальных символов штрихами

$('#title').on('keyup', function (e) {    
    e.preventDefault(); 
    var str = $(this).val(); 
    str = str.replace(/\W+/g, '-').toLowerCase(); 
    $('#url').val(str); 
}); 

Но вот вопрос, если я вхожу Big "Fish" Little "Fish" JQuery будет преобразовать это: big-fish-little-fish-. Поэтому вопрос заключается в том, как удалить последнее - в конце. Могу ли я использовать что-то вроде before(), а затем он заменит?

ответ

2

Вместо того, чтобы делать что-то, чтобы заменить окончательный - вы можете также использовать отрицательный предпросмотр, чтобы избежать замены всего, что происходит в конце string, а затем использовать последующий оператор для замены любого символа non word, который встречается в конце с пустым пространством.

$('#title').on('keyup', function (e) { 
    //alert("key up"); 
    e.preventDefault(); 
    var str = $(this).val(); 
    str = str.replace(/\W+(?!$)/g, '-').toLowerCase(); 
    str = str.replace(/\W$/, '').toLowerCase(); 
    $('#url').val(str); 
}); 

Пример Fiddle: https://jsfiddle.net/ue1vedez/

+0

Спасибо отлично работает! – Sickaaron

0

Как насчет добавить еще один replace(), который бы удалить окончание тире

str = str.replace(/\W+/g, '-').replace(/\-$/, '').toLowerCase(); 
0
$('#title').on('keyup', function (e) { 
    //alert("key up"); 
    e.preventDefault(); 
    var str = $(this).val(); 
    str = str.replace(/\W+(?!$)/g, '-').toLowerCase(); 
    str = str.replace(/\W+$/, '').toLowerCase(); 
    $('#url').val(str); 
}); 

Используйте W + вместо этого просто W, потому что так не позволяют ставить '-' в последних при различных символов типа в последний

Смежные вопросы