Вопрос говорит сам за себя; JS, похоже, не имеет собственного метода trim ().
Демократия будет решаться подсчетом голосов, но вы все равно можете выбрать тот, который вы использовали в конце, в качестве ответа на вашу проблему - это две немного разные концепции.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


согласно эта страница лучший универсальный подход -
return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
Конечно, если вы используете jQuery, он предоставит вам оптимизированный метод обрезки.
Согласно связанной странице, единственная разница между \ s + и \ s \ s * заключается в том, что последний работает немного быстрее.
Если вы читаете дальше, модифицированный trim11, упомянутый в конце статьи, является лучшим методом для более длинных струн.
Это старый поток, и пока что встроенная обрезка реализована в Javascript. Регулярное выражение Пэта, а также упомянутый Крисом Макдональдом trim11 очень медленные, а также jquery trim медленный в некоторых браузерах (jsperf.com/mega-trim-test/16). Здесь можно найти гораздо более быструю реализацию обрезки: stackoverflow.com/a/12547889/1691517.
Ответ на многие вопросы о JavaScript: jQuery
$j.trim(string)
Примечание: приведенное выше предполагает, что ваш jQuery настроен с помощью:
<script type = "text/javascript">$j = jQuery.noConflict();</script>
Это гораздо более разумно, чем "$", и гораздо менее многословно, чем каждый раз вводить "jQuery".
Объект jQuery. Намного разумнее, чем просто использовать $. <script type = "text / javascript" src = "jquery.js"> </script> <script type = "text / javascript"> $ j = jQuery.noConflict (); </script>
Почему $j более разумно, чем $?
Немного более маленькая версия @ Pat's.
return str.replace( /^\s+|\s+$/g, '' );
Я думаю, вам нужно выполнить это для текста в вызове вашего метода. ;)
Для ltrim замените пробелы, закрепленные в начале строки, ничем:
str2 = str.replace(/^\s+/,'');
Для rtrim замените пробелы, закрепленные в конце строки, ничем:
str2 = str.replace(/\s+$/,'');
Для обрезки:
str2 = str.replace(/^\s+|\s+$/g,'');
Все они используют регулярные выражения для выполнения фактической работы.
Как уже отметили некоторые другие, обычно лучше всего делать такие вещи, используя стороннюю библиотеку JS. Не то, чтобы trim () - сложная функция для самостоятельного создания, но существует так много функций, которые не являются родными для JavaScript, которые могут вам понадобиться и в конечном итоге написать самостоятельно, что вскоре становится более рентабельным использование библиотеки.
Конечно, еще одним преимуществом использования библиотеки JS является то, что авторы проделывают тяжелую работу по обеспечению того, чтобы функции работали во всех основных браузерах, так что вы можете кодировать стандартный интерфейс и забыть о раздражающих различиях между Internet Explorer и всем остальным. другие браузеры.
Что ж, как всегда говорят многие, функция обрезки работает довольно хорошо, но если вы не хотите использовать весь фреймворк только для выполнения обрезки, может быть полезно взглянуть на ее реализацию. Итак, вот оно:
function( text ) { return (text || "").replace( /^(\s|\u00A0)+|(\s|\u00A0)+$/g, "" );}
Основные преимущества, которые я вижу в этой реализации, по сравнению с другими уже предложенными здесь решениями:
Флаг g бесполезен без флага m.
Microsoft .NET также имеет функцию String.trim как часть расширений базового типа JavaScript. Его можно использовать, если вы пишете приложение ASP.NET.
Почему бы просто не изменить прототип String? Почему бы не украсть функцию обрезки из библиотеки с открытым исходным кодом, как я сделал здесь с YUI? (Вам действительно нужно загрузить и весь фреймворк для этих простых приемов?) Сложите их вместе, и вы получите следующее:
String.prototype.trim = function() {
try {
return this.replace(/^\s+|\s+$/g, "");
} catch(e) {
return this;
}
}
var s = " hello ";
alert(s.trim() == "hello"); // displays true
Я использую это.
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g,"");
}
Используйте Функция быстрой обрезки Ariel Flesler:
// Licensed under BSD
function myBestTrim( str ){
var start = -1,
end = str.length;
while( str.charCodeAt(--end) < 33 );
while( str.charCodeAt(++start) < 33 );
return str.slice( start, end + 1 );
};
Однако мое решение было бы следующим (потому что объект String в Firefox 3.5 и выше уже имеет trim метод):
String.prototype.trim = String.prototype.trim || function () {
var start = -1,
end = this.length;
while( this.charCodeAt(--end) < 33 );
while( this.charCodeAt(++start) < 33 );
return this.slice( start, end + 1 );
};
вы шутите? он не может быть быстрым, так как он использует множество функций внутри
Я использую это:
Работа с функциями.
function trim($) {
return (typeof $ == "function" ? $() : $).replace(/[\s]*/g,"")
}
code example:
trim((function(){ return "a b"})) // ab
trim(" a b") //ab
Вы можете использовать следующие ...
function trim(str) {
try {
if (str && typeof(str) == 'string') {
return str.replace(/^\s*|\s*$/g, "");
} else {
return '';
}
} catch (e) {
return str;
}
}
Я задумал скорость с функцией триммирования. Эта функция явно превосходит всех 24 конкурентов (многие из которых используют регулярные выражения), а также встроенную функцию string.trim () Chrome и Chromium (!) И работает так же быстро, как trim () в Safari. Результаты тестов здесь: http://jsperf.com/mega-trim-test/7
function trim27(str) {
var c;
for (var i = 0; i < str.length; i++) {
c = str.charCodeAt(i);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12)
continue; else break;
}
for (var j = str.length - 1; j >= i; j--) {
c = str.charCodeAt(j);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12)
continue; else break;
}
return str.substring(i, j + 1);
}
Функция обрезает символы "\ n \ r \ t \ f", но легко добавить больше пробельных символов, например. те, которые регулярное выражение использует как пробелы, с незначительной потерей производительности (см. http://jsperf.com/mega-trim-test/8).
Обновлено: предыдущий trim27 () обрезает только самые распространенные символы ("\ n \ r \ t \ f"), но чтобы обрезать все возможные пробелы, я добавил ниже новую функцию mytrim ():
if (!String.prototype.trim || "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF".trim() || navigator.userAgent.toString().toLowerCase().indexOf("chrome") != -1)
var mytrim = function(str) {
var c;
for (var i = 0; i < str.length; i++) {
c = str.charCodeAt(i);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279)
continue; else break;
}
for (var j = str.length - 1; j >= i; j--) {
c = str.charCodeAt(j);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279)
continue; else break;
}
return str.substring(i, j + 1);
};
else var mytrim = function(str) {
return str.trim();
}
Используйте это так:
var foo = mytrim(" \n \t Trimmed \f \n "); // foo is now "Trimmed"
Вышеупомянутый mytrim () делает следующее:
Это, вероятно, не самый быстрый и может нарушать то, что, вероятно, действительно должно быть ".trim ()", но мне не нравятся регулярные выражения (в основном потому, что требуется так много времени, чтобы понять, что они на самом деле означают / делают), и мне нравится иметь что-то, что, как я знаю, будет работать независимо от того, есть ли у меня jQuery или нет (не говоря уже о правильной версии, поскольку я пробовал $ .trim (myVar) с jQuery 1.4.2, и он не работает), и избавлюсь от ВСЕХ лишние пробелы, а не только в конце, перестраивая его так, как должно быть:
function Trim(obj) {
var coll = "";
var arrObj = obj.split(' ');
for (var i=0;i<arrObj.length;i++) {
if (arrObj[i] == "") {
arrObj.splice(i,1); // removes array indices containing spaces
}
}
//alert(arrObj.length); // should be equal to the number of words
// Rebuilds with spaces in-between words, but without spaces at the end
for (var i=0;i<arrObj.length;i++) {
if (arrObj[i] != "" && i != arrObj.length-1)
coll += arrObj[i] + " ";
if (arrObj[i] != "" && i == arrObj.length-1)
coll += arrObj[i];
}
return coll;
}
Я знаю, что это древний вопрос, но теперь у Javascript действительно есть собственный .trim ()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim
Ты прав! Родной всегда лучше. Это только от IE9 и выше, но через несколько лет это тоже не будет иметь большого значения.
@MDCore спасибо, что приняли мой ответ и упомянули минимальную версию IE. Но что вы имеете в виду, когда говорите, что через несколько лет это не будет иметь значения, вы говорите, что javascript устареет?
@KR Итак, я задал этот вопрос пять с половиной лет назад. С тех пор trim () стал стандартной функцией. Я решил просто указать, что мы почти в плане поддержки IE, но через пять с половиной лет это будет спорным. Я бы предпочел, чтобы люди использовали собственные функции и использовали один из многих других ответов, если они застряли в IE8.
Это старый вопрос, но у меня ни один из них не помог. Мне просто нужно было обрезать начальное и конечное белое пространство, что я и сделал. У моего тега div был id = start-date.
$("#start-date").text().trim()
"Это старый вопрос, но у меня ни один из них не помог." Правда? Даже родная отделка салона, упомянутая К.?
Я использую это с собственным JavaScript
// Adding trim function to String object if its not there
if (typeof String.prototype.trim !== 'function') {
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
}
}
Используйте как это
var myString = " some text ";
alert(myString.trim());
Пример
// Adding trim function to String object if its not there
if (typeof String.prototype.trim !== 'function') {
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
}
}
var str = " some text ";
console.info(str.trim());
Спасибо за все отличные ответы. Я не думаю, что есть один ответ, который значительно лучше, чем все остальные, поэтому могу ли я оставить это на усмотрение демократии вместо «Принять ответ»?