Javascript Clean URL Regex - PullRequest
       17

Javascript Clean URL Regex

5 голосов
/ 10 сентября 2009

Я создаю раздел новостей CMS с несколькими полями, но для этого вопроса особенно нужны поля «Заголовок» и «Ссылка на URL». Когда пользователь вводит заголовок статьи, я хочу, чтобы Javascript / jQuery заменил текст из поля «Заголовок» и создал «чистый» фрагмент URL, удалив все пробелы и странные символы с дефисом (-).

например.

Kris 'FUN new Article (Title)

kris-fun-new-article (ссылка на URL)

Вот код, но я не могу понять, как заменить несколько пробелов и специальных символов

$('#title').keyup(function(){
    var ref = $(this).val().toLowerCase().replace('\ ','-');
    $('#reference').val(ref);
});

Также, как и в заголовке «Новая статья Kris 'FUN”, регулярное выражение должно заменить «Kris» (цитата и пробел) на «kris -» (одна черта). По сути, узнайте, есть ли два специальных символа рядом друг с другом, и замените их одним штрихом. НЕ как это "Крис - веселая новая статья".

Заранее спасибо

Ответы [ 5 ]

10 голосов
/ 11 сентября 2009

Ответ Самира Талвара верен, за исключением того, что в конце регулярного выражения должен быть флаг /.../g для обозначения глобального совпадения. Без /.../g заменяется только первое совпадение.

Торез, вот обновленная версия вашей функции:

$('#title').keyup(function(){
    var ref = $(this).val().toLowerCase().replace(/[^a-z0-9]+/g,'-');
    $('#reference').val(ref);
});

(Извините, Самир, я бы прокомментировал ваш ответ, за исключением того, что у меня пока недостаточно очков репутации.)

4 голосов
/ 11 сентября 2009

Попробуйте:

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"
1 голос
/ 10 сентября 2009

Вам нужен глобальный флаг - g - в регулярном выражении и какой-то квантификатор для кратных (+ = одно или несколько совпадений, кажется прямо здесь).

Так что-то вроде replace(/[' {insert further chars you care about here}]+/g,'-')

0 голосов
/ 11 сентября 2009

Как это?

str = str.toLowerCase().replace(/[^a-z0-9]+/, '-');

Должен заменить все, что не является буквой или цифрой, тире, а + означает, что это займет более одного из них одновременно.

0 голосов
/ 10 сентября 2009

Я думаю, что вам нужен класс символов, который содержит специальные символы и пробел, тогда вы можете указать один или несколько экземпляров класса символов следующим образом:

[specials charaters " "]+

и замените это совпадение тире

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...