24 ответов:
Все браузеры начиная с IE9 + имеют
trim().Для тех браузеров, которые не поддерживают
trim(), Вы можете использовать этот полифилл из MDN :if (!String.prototype.trim) { (function() { // Make sure we trim BOM and NBSP var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; String.prototype.trim = function() { return this.replace(rtrim, ''); }; })(); }
Смотрите это:
String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');}; String.prototype.ltrim=function(){return this.replace(/^\s+/,'');}; String.prototype.rtrim=function(){return this.replace(/\s+$/,'');}; String.prototype.fulltrim=function(){return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');};
Обрезка изjQuery удобна, если вы уже используете эту структуру.
$.trim(' your string ');Я часто использую jQuery, поэтому обрезка строк с его помощью естественна для меня. Но возможно ли, что существует обратная реакция против jQuery? :)
Хотя выше есть куча правильных ответов, следует отметить, что объект
Stringв JavaScript имеет собственный метод.trim()в качестве ECMAScript 5. Таким образом, в идеале любая попытка прототипировать метод обрезки должна действительно проверить, существует ли он уже в первую очередь.if(!String.prototype.trim){ String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g,''); }; }Добавлено изначально в: JavaScript 1.8.1 / ECMAScript 5
Таким образом поддерживается в:
Firefox: 3.5+
Сафари: 5+
Internet Explorer: IE9+ (только в стандартном режиме!) http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx
Хром: 5+
Опера: 10.5+
Таблица поддержки ECMAScript 5: http://kangax.github.com/es5-compat-table/
Существует множество реализаций, которые можно использовать. Наиболее очевидным кажется что-то вроде этого:
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); }; " foo bar ".trim(); // "foo bar"
Простая версия здесь Что такое общая функция для JavaScript trim?
function trim(str) { return str.replace(/^\s+|\s+$/g,""); }
Я знаю, что этот вопрос был задан три года назад.Теперь,
String.trim()был добавлен изначально в JavaScript.Например, вы можете обрезать непосредственно следующим образом,document.getElementById("id").value.trim();
вопиющий задира имеет 11 различных обрезов с контрольной информацией:
Http://blog.stevenlevithan.com/archives/faster-trim-javascript
Не удивительно, что регулярное выражение на основе медленнее, чем традиционный цикл.
Вот мой личный. Этот код старый! Я написал его для JavaScript1. 1 и Netscape 3, и с тех пор он был лишь немного обновлен. (Оригинальная используемая строка.charAt)
/** * Trim string. Actually trims all control characters. * Ignores fancy Unicode spaces. Forces to string. */ function trim(str) { str = str.toString(); var begin = 0; var end = str.length - 1; while (begin <= end && str.charCodeAt(begin) < 33) { ++begin; } while (end > begin && str.charCodeAt(end) < 33) { --end; } return str.substr(begin, end - begin + 1); }
Если вы используете jQuery, используйте функцию
jQuery.trim(). Например:if( jQuery.trim(StringVariable) == '')
Используйте собственные методы JavaScript:
String.trimLeft(),String.trimRight(), и ещеString.trim().
String.trim()поддерживается в IE9+ и всех других основных браузерах :' Hello '.trim() //-> 'Hello'
String.trimLeft()иString.trimRight()являются нестандартными, но поддерживаются в всех основных браузерах , кроме IE' Hello '.trimLeft() //-> 'Hello ' ' Hello '.trimRight() //-> ' Hello'
Поддержка IE проста с помощью polyfill, однако:if (!''.trimLeft) { String.prototype.trimLeft = function() { return this.replace(/^\s+/,''); }; String.prototype.trimRight = function() { return this.replace(/\s+$/,''); }; if (!''.trim) { String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }; } }
Теперь дни вы можете использовать строку.trim () , то есть собственная реализация Javascript
var orig = " foo "; console.log(orig.trim());//fooСм. также
String.prototype.trim = String.prototype.trim || function () { return this.replace(/^\s+|\s+$/g, ""); }; String.prototype.trimLeft = String.prototype.trimLeft || function () { return this.replace(/^\s+/, ""); }; String.prototype.trimRight = String.prototype.trimRight || function () { return this.replace(/\s+$/, ""); }; String.prototype.trimFull = String.prototype.trimFull || function () { return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g, "").replace(/\s+/g, " "); };Бесстыдно украдено уМэтта дюрега .
Trim code from angular js project
var trim = (function() { // if a reference is a `String`. function isString(value){ return typeof value == 'string'; } // native trim is way faster: http://jsperf.com/angular-trim-test // but IE doesn't have it... :-( // TODO: we should move this into IE/ES5 polyfill if (!String.prototype.trim) { return function(value) { return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value; }; } return function(value) { return isString(value) ? value.trim() : value; }; })();И назовем его
trim(" hello ")
Используйте простой код
var str = " Hello World! "; alert(str.trim());Поддержка браузера
Feature Chrome Firefox Internet Explorer Opera Safari Edge Basic support (Yes) 3.5 9 10.5 5 ?Для старого браузера добавьте прототип
if (!String.prototype.trim) { String.prototype.trim = function () { return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); }; }
Вы можете просто объявить переменную как строку и использовать ее функцию trim:
var str = new String('my string'); str= str.trim();
Сегодня практически каждый браузер поддерживает
String.prototype.trim().Вы используете его так:
var origStr = ' foo '; var newStr = origStr.trim(); // Value of newStr becomes 'foo'В случае, если вам все еще может потребоваться поддержка древнего браузера, который не поддерживает эту функцию, это полифилл предложено МДН:
if (!String.prototype.trim) { String.prototype.trim = function () { return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); }; }
У меня есть lib, который использует trim. поэтому решил ее, используя следующий код.
String.prototype.trim = String.prototype.trim || function(){ return jQuery.trim(this); };
if(!String.prototype.trim){ String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/gm,''); }; }От предыдущих ответов он отличается добавлением флага
m.Флаг
mбудет искать текст нескольких линейных. В этом режиме отмечаются начало и конец паттерна (^$) вставляется до и после символа новой строки (\n).
Не знаю, какие ошибки могут скрываться здесь, но я использую это:
var some_string_with_extra_spaces=" goes here " console.log(some_string_with_extra_spaces.match(/\S.*\S|\S/)[0])Или это, если текст содержит вводы:
console.log(some_string_with_extra_spaces.match(/\S[\s\S]*\S|\S/)[0])Еще одна попытка:
console.log(some_string_with_extra_spaces.match(/^\s*(.*?)\s*$/)[1])
Вот он в машинописи:
var trim: (input: string) => string = String.prototype.trim ? ((input: string) : string => { return (input || "").trim(); }) : ((input: string) : string => { return (input || "").replace(/^\s+|\s+$/g,""); })Он вернется к регулярному выражению, если собственный прототип недоступен.
Я написал эту функцию для trim, когда тот .функция trim() была недоступна в JS еще в 2008 году. Некоторые из старых браузеров все еще не поддерживают .функция trim (), и я надеюсь, что эта функция может кому-то помочь.
ФУНКЦИЯ ОБРЕЗКИ
function trim(str) { var startpatt = /^\s/; var endpatt = /\s$/; while(str.search(startpatt) == 0) str = str.substring(1, str.length); while(str.search(endpatt) == str.length-1) str = str.substring(0, str.length-1); return str; }Пояснение : функция trim() принимает объект string и удаляет все начальные и конечные пробелы (пробелы,табуляции и новые строки) и возвращает обрезанную строку. Вы можете использовать эту функцию для обрезки формируйте входные данные, чтобы обеспечить отправку достоверных данных.
В качестве примера функцию можно вызвать следующим образом.form.elements[i].value = trim(form.elements[i].value);
Вы можете сделать это с помощью простого JavaScript:
function trimString(str, maxLen) { if (str.length <= maxLen) { return str; } var trimmed = str.substr(0, maxLen); return trimmed.substr(0, trimmed.lastIndexOf(' ')) + '…'; } // Let's test it sentenceOne = "too short"; sentencetwo = "more than the max length"; console.log(trimString(sentenceOne, 15)); console.log(trimString(sentencetwo, 15));Вот еще несколько примеров, чтобы обрезка строки с помощью JavaScript.
Mine использует одно регулярное выражение для поиска случаев, когда обрезка необходима, и использует результаты этого регулярного выражения для определения желаемых границ подстроки:
Единственное проектное решение, которое вошло в это, было использование подстроки для выполнения окончательного захвата. с/\?: / / (сделайте средний захват термина) и и фрагмент замены становится:var illmatch= /^(\s*)(?:.*?)(\s*)$/ function strip(me){ var match= illmatch.exec(me) if(match && (match[1].length || match[2].length)){ me= me.substring(match[1].length, p.length-match[2].length) } return me }if(match && (match[1].length || match[3].length)){ me= match[2] }В этих имплах я сделал две ставки на производительность:
Копирует ли реализация подстроки исходную строку данные? если это так, то в первом случае, когда строка должна быть обрезана, есть двойной обход, первый в регулярном выражении (которое, надеюсь, будет частичным), а второй в извлечении подстроки. будем надеяться, что реализация подстроки ссылается только на исходную строку, поэтому операции, подобные подстроке, могут быть почти свободными. скрестить пальцы
Насколько хорош захват в регулярном выражении impl? средний срок, выходное значение, потенциально может быть очень длинным. я не был готов взять все это в банк. захват regex Imps не помешал бы захвату входных данных на пару сотен КБ, но я также не тестировал (слишком много времени выполнения, извините!). второй всегда выполняет захват; если ваш двигатель может сделать это, не принимая удар, возможно, используя некоторые из вышеперечисленных методов веревки-веревки, наверняка используйте его!
Для IE9+ и других браузеров
function trim(text) { return (text == null) ? '' : ''.trim.call(text); }
Comments