Какая чистая и эффективная реализация JavaScript позволяет сбрасывать ведущие и конечные пробелы из строки?
Например:
" dog"
"dog "
" dog "
" dog "
все превращаются в
"dog"
Какая чистая и эффективная реализация JavaScript позволяет сбрасывать ведущие и конечные пробелы из строки?
Например:
" dog"
"dog "
" dog "
" dog "
все превращаются в
"dog"
Используйте это:
if(typeof(String.prototype.trim) === "undefined")
{
String.prototype.trim = function()
{
return String(this).replace(/^\s+|\s+$/g, '');
};
}
Теперь функция обрезки будет доступна как функция первого класса в ваших строках. Например:
" dog".trim() === "dog" //true
РЕДАКТИРОВАТЬ: предложил J-P для объединения шаблонов регулярных выражений в один. Также добавлен глобальный модификатор по предложению Кристофа.
Взял идею Мэтью Крамли о том, чтобы обнюхивать функцию триммера перед ее воссозданием. Это делается в случае, если версия JavaScript, используемая на клиенте, является более поздней и, следовательно, имеет свою собственную функцию обрезки.
Для пользователей jquery, как насчет $.trim(s)
Gumbo уже отметил это в комментарии, но это повторяется как ответ: метод trim()
был добавлен в JavaScript 1.8.1 и поддерживается всеми современными браузерами (Firefox 3.5+, IE 9, Chrome 10, Safari 5.x), хотя IE 8 и старше не поддерживают его. Использование прост:
" foo\n\t ".trim() => "foo"
См. также:
Лучше polyfill из MDN, который поддерживает удаление Спецификация и NBSP:
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
Имейте в виду, что изменение встроенных прототипов сопровождается поражением производительности (из-за того, что JS-движок запускает несколько оптимизаций во время выполнения), и в критических ситуациях производительности вам может потребоваться альтернатива определения myTrimFunction(string)
вместо, При этом, если вы ориентируетесь на более старую среду без поддержки native .trim()
, у вас, вероятно, будут более важные проблемы с производительностью.
Здесь используется функция.
function trim(s){
return ( s || '' ).replace( /^\s+|\s+$/g, '' );
}
Стивен Левитан как-то написал о том, как реализовать Быстрее JavaScript Trim. Его определенно стоит посмотреть.
Если вы уже используете jQuery, вам может понадобиться посмотреть jQuery.trim()
, который уже предоставлен с помощью jQuery.
Если вместо написания нового кода для обрезки строки вы смотрите на существующий код, который вызывает "strip()", и задается вопросом, почему он не работает, вы можете проверить, пытается ли он включить что-то вроде структуру prototypejs и убедитесь, что она действительно загружается.
Эта структура добавляет функцию полосы для всех объектов String, но если, например, вы обновили его, и ваши веб-страницы все еще ссылаются на старый .js файл, он, конечно, не будет работать.