Я работаю над приложением в CodeIgniter и пытаюсь сделать поле в форме динамически генерировать URL-адрес. Я хотел бы удалить пунктуацию, преобразовать ее в нижний регистр и заменить пробелы дефисами. Так, например, Шейни Риб Шак станет Шейн-Риб-Шак.
Вот что у меня так далеко. Строчная часть была легкой, но замена, кажется, не работает вообще, и я понятия не имею, чтобы удалить пунктуацию:
$("#Restaurant_Name").keyup(function(){
var Text = $(this).val();
Text = Text.toLowerCase();
Text = Text.replace('/\s/g','-');
$("#Restaurant_Slug").val(Text);
});
javascript
jquery
regex
GSto
источник
источник
Ответы:
Я понятия не имею, откуда взялся термин «слизняк», но мы здесь:
Первая замена заменяет пробелы на дефисы, вторая замена удаляет все, что не алфавитно-цифровое, подчеркивание или дефис.
Если вы не хотите, чтобы такие вещи, как «это» превратились в «как… это», вы можете вместо этого использовать это:
Это удалит дефисы (но не пробелы) при первой замене, а во второй замене это объединит последовательные пробелы в один дефис.
Так что «как - это» выходит как «как это».
источник
text.toLowerCase().replace(/ /g,'-').replace(/[-]+/g, '-').replace(/[^\w-]+/g,'');
вместо варианта 2. Вариант 2 изменит «th - is» на «this».и попробуйте
оригинал: http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
РЕДАКТИРОВАТЬ: расширен для более специфичных для языка символов:
источник
ü
должны быть заменены наue
и т. Д.å
хотя.İĞŞığş
вfrom
переменную и преобразовать ихIGSigs
в поддержку турецких символов.Прежде всего, регулярные выражения не должны иметь окружающих кавычек, поэтому '/ \ s / g' должно быть / \ s / g
Чтобы заменить все не алфавитно-цифровые символы тире, это должно работать (используя ваш пример кода):
Это должно делать свое дело...
источник
Я нашел хорошее и полное решение для английского языка
Некоторые примеры его использования:
Спасибо Эндрю Стюарту
источник
Надеюсь, что это может спасти чей-то день ...
источник
Все, что вам нужно было плюс :)
источник
Взгляните на эту функцию slug для очистки URL-адресов, разработанную Шоном Мерфи на https://gist.github.com/sgmurphy/3095196
источник
Я создаю плагин для реализации на большинстве языков: http://leocaseiro.com.br/jquery-plugin-string-to-slug/
Использование по умолчанию:
Очень просто имеет stringToSlug jQuery плагин
источник
* на основании https://gist.github.com/mathewbyrne/1280286
Теперь вы можете преобразовать эту строку:
в:
применяя к вашему коду:
источник
Сочетание различных элементов из ответов здесь с нормализацией обеспечивает хороший охват. Сохраняйте порядок операций для постепенной очистки URL.
normlize('NFD')
разбивает акцентированные символы на их составляющие, которые являются основными буквами плюс диакритические знаки (акцентная часть).replace(/[\u0300-\u036f]/g, "")
удаляет все диакритические знаки, оставляя основные буквы сами по себе. Остальное объясняется встроенными комментариями.источник
Вы можете использовать свою собственную функцию для этого.
попробуйте это: http://jsfiddle.net/xstLr7aj/
источник
Принятый ответ не отвечал моим потребностям (он позволяет подчеркивать, не обрабатывает дефисы в начале и в конце и т. Д.), А другие ответы имели другие проблемы, которые не подходили для моего варианта использования, поэтому вот функция slugify Я придумал:
Это превратит 'foo !!! BAR _-_-_ baz-' (обратите внимание на пробел в начале) в
foo-bar-baz
.источник
Возможно, вы захотите взглянуть на плагин speakURL, а затем просто можете:
источник
Еще один. Коротко и содержит специальные символы:
imaginação é mato => Imagacao-e-mato
источник
Более мощный метод генерации слагов на чистом JavaScript. Он в основном поддерживает транслитерацию для всех символов кириллицы и многих умлаутов (немецкий, датский, французский, турецкий, украинский и т. Д.), Но может быть легко расширен.
источник
Для людей, уже использующих
lodash
Большинство из этих примеров действительно хороши и охватывают множество случаев. Но если вы «знаете», что у вас есть только текст на английском языке, вот моя версия, которую очень легко прочитать :)
_.words(_.toLower(text)).join('-')
источник
Ну, после прочтения ответов, я придумал этот.
источник
Примечание: если вас не интересует аргумент против принятого ответа и вы просто ищете ответ, тогда пропустите следующий раздел, в конце вы найдете предложенный мной ответ.
В принятом ответе есть несколько вопросов (на мой взгляд):
1) как для первого фрагмента функции:
не обращая внимания на несколько последовательных пробелов
вход:
is it a good slug
получили:
---is---it---a---good---slug---
Ожидаемый результат:
is-it-a-good-slug
не обращая внимания на несколько последовательных штрихов
вход:
-----is-----it-----a-----good-----slug-----
получили:
-----is-----it-----a-----good-----slug-----
Ожидаемый результат:
is-it-a-good-slug
обратите внимание, что эта реализация не обрабатывает внешние тире (или пробелы в этом отношении), независимо от того, являются ли они множественными последовательными символами или единичными символами, которые (насколько я понимаю слагы и их использование) недопустимы
2) что касается второго фрагмента функции:
он заботится о нескольких последовательных пробелах, преобразовывая их в одиночные,
-
но этого недостаточно, поскольку внешние (в начале и в конце строки) пробелы обрабатываются одинаково, поэтомуis it a good slug
будет возвращаться-is-it-a-good-slug-
он также удаляет черточки вообще от входа , который преобразует что - то подобное
--is--it--a--good--slug--'
вisitagoodslug
, сниппет в комментарии от @ Райана-шестигранник заботится о том , что, в результате чего внешние черточки выдавать нерешенной , хотятеперь я знаю, что нет стандартного определения для слагов, и принятый ответ может выполнить задание (которое искал пользователь, который разместил вопрос), но это самый популярный вопрос SO о слизняках в JS, поэтому эти проблемы Нужно было указать, также (в отношении выполнения работы! ) представьте, что вы печатаете эту мерзость URL (
www.blog.com/posts/-----how-----to-----slugify-----a-----string-----
) или даже просто перенаправляетесь на нее вместо чего-то вроде (www.blog.com/posts/how-to-slugify-a-string
), я знаю, что это крайний случай, но эй, это то, что тестирует для.Лучшее решение , на мой взгляд, было бы следующим:
теперь, вероятно, существует ниндзя RegExp, который может преобразовать это в однострочное выражение, я не эксперт в RegExp, и я не говорю, что это лучшее или самое компактное решение или решение с лучшей производительностью но, надеюсь, это может сделать работу.
источник
Этот код работает
источник
Это помогло мне с той же проблемой!
источник
это работает для меня нормально.
Нашел это на CodeSnipper
источник
источник