Строка обрезки в JavaScript?

Как обрезать строку в JavaScript?

Ответы

Ответ 1

Все браузеры начиная с 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, '');
        };
    })();
}

Тем не менее, при использовании jQuery, $.trim(str) также доступен и обрабатывает undefined/null.


Смотрите это:

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,' ');};

Ответ 2

Обрезка из jQuery удобна, если вы уже используете эту фреймворк.

$.trim('  your string   ');

Я часто использую jQuery, поэтому обрезка строк с ним естественна для меня. Но возможно ли, что есть реакция на jQuery?:)

Ответ 3

Хотя есть несколько правильных ответов выше, следует отметить, что объект 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 +

Safari: 5 +

Internet Explorer: IE9 + (только в режиме стандартов!) http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx

Chrome: 5 +

Opera: 10.5 +

Таблица поддержки поддержки ECMAScript 5: http://kangax.github.com/es5-compat-table/

Ответ 4

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

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, "");
};

" foo bar ".trim();  // "foo bar"

Ответ 6

Я знаю, что этот вопрос задан на три года назад. Теперь был добавлен изначально в JavaScript. Для экземпляра вы можете обрезать непосредственно, как показано ниже,

document.getElementById("id").value.trim();

Ответ 7

Если вы используете jQuery, используйте jQuery.trim(). Например:

if( jQuery.trim(StringVariable) == '')

Ответ 8

Flagrant Badassery имеет 11 различных планок с контрольной информацией:

http://blog.stevenlevithan.com/archives/faster-trim-javascript

Неудивительно, что regexp-based медленнее, чем традиционный цикл.


Вот мой личный. Этот код устарел! Я написал его для JavaScript1.1 и Netscape 3, и с тех пор он немного обновлялся. (Оригинал используется String.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);
}

Ответ 9

Используйте собственные методы 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, '');
        };
    }
}

Ответ 10

В настоящее время вы можете использовать string.trim(), который является встроенной реализацией Javascript

var orig = "   foo  ";
console.log(orig.trim());//foo

См. также

Ответ 11

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, " ");
};

Бесстыдно украден из Matt duereg.

Ответ 12

Код обрезки 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 ")

Ответ 13

используйте просто код

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, '');
  };
}

Ответ 14

Здесь очень простой способ:

function removeSpaces(string){
return string.split(' ').join('');
}

Ответ 15

Вы можете просто объявить свою переменную как строку и использовать ее функцию обрезки:

var str = new String('my string'); 
str= str.trim();

Ответ 16

Сегодня почти каждый браузер поддерживает String.prototype.trim().

Вы используете его следующим образом:

var origStr = '   foo  ';
var newStr = origStr.trim(); // Value of newStr becomes 'foo'

Если вам все-таки понадобится поддержка старого браузера, который не поддерживает эту функцию, это a polyfill, предложенный MDN:

if (!String.prototype.trim) {
    String.prototype.trim = function () {
       return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
    };
}

Ответ 17

Использование trim() для String, которая является нативной, может быть самым простым способом:

const fullName = "       Alireza Dezfoolian     ";
const trimmedFullName = fullName.trim();

console.log(trimmedFullName);

Ответ 18

У меня есть lib, который использует trim. поэтому решил это, используя следующий код.

String.prototype.trim = String.prototype.trim || function(){ return jQuery.trim(this); };

Ответ 19

if(!String.prototype.trim){  
  String.prototype.trim = function(){  
    return this.replace(/^\s+|\s+$/gm,'');  
  };  
}

Из предыдущих ответов он отличается добавлением флага m.

Флаг m будет искать текст нескольких линейных. В этом режиме отметка начала и конца шаблона (^ $) вставлена ​​до и после символа новой строки (\n).

Ответ 20

Не знаю, какие ошибки могут скрываться здесь, но я использую это:

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])

Ответ 21

Здесь он находится в TypeScript:

var trim: (input: string) => string = String.prototype.trim
    ? ((input: string) : string => {
        return (input || "").trim();
    })
    : ((input: string) : string => {
        return (input || "").replace(/^\s+|\s+$/g,"");
    })

Он будет возвращаться к регулярному выражению, если родной прототип недоступен.

Ответ 22

Я написал эту функцию для обрезки, когда функция .trim() была недоступна в JS еще в 2008 году. Некоторые из старых браузеров по-прежнему не поддерживают функцию .trim(), и я надеюсь, что эта функция может помочь кто-то.

ФУНКЦИЯ 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() принимает строковый объект и удаляет любые начальные и конечные пробелы (пробелы, вкладки и символы новой строки) и возвращает обрезанную строку. Вы можете использовать эту функцию, чтобы обрезать входные данные форм, чтобы обеспечить отправку достоверных данных.

В качестве примера функцию можно вызвать следующим образом.

form.elements[i].value = trim(form.elements[i].value);

Ответ 23

Вы можете сделать это, используя простой JavaScript:

function trimString(str, maxLen) {
if (str.length <= maxLen) {
return str;
}
var trimmed = str.substr(0, maxLen);
return trimmed.substr(0, trimmed.lastIndexOf(' ')) + '…';
}

// Let test it

sentenceOne = "too short";
sentencetwo = "more than the max length";

console.log(trimString(sentenceOne, 15));
console.log(trimString(sentencetwo, 15));

Ответ 24

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

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
}

одно дизайнерское решение, которое входило в это, использовало подстроку для выполнения окончательного захвата. s/\?://(сделать захват среднего значения), а заменяющий фрагмент будет выглядеть следующим образом:

    if(match && (match[1].length || match[3].length)){
        me= match[2]
    }

есть две ставки производительности, которые я сделал в этих импланах:

  • выполняет ли реализация подстроки исходные данные строки? если это так, то в первом случае, когда строка должна быть обрезана, происходит двойное обход, сначала в регулярном выражении (которое, возможно, должно быть частичным), и второе в извлечении подстроки. мы надеемся, что реализация подстроки ссылается только на исходную строку, поэтому операции, подобные подстроке, могут быть почти бесплатными. крест-пальцы

  • Насколько хорош захват в regex impl? средний срок, выходное значение, потенциально может быть очень большим. я не был готов к банку, что все захваты regex impls не будут препятствовать захвату ввода нескольких сотен KB, но я также не тестировал (слишком много времени выполнения, извините!). второй ВСЕГДА запускает захват; если ваш движок может сделать это без хита, возможно, используя некоторые из вышеперечисленных методов построения строк, обязательно используйте USE IT!

Ответ 25

Для IE9 + и других браузеров

function trim(text) {
    return (text == null) ? '' : ''.trim.call(text);
}