JavaScript에서 문자열 자르기?


1304

JavaScript에서 문자열을 자르려면 어떻게해야합니까?


290
이 질문이 제기 된 후 2 년은 String.trim ()이 JavaScript 1.8.1 / ECMAScript 5에 기본적으로 추가되었으며 Firefox 3.5 이상, Chrome / Safari 5 이상, IE9 + (표준 모드에서만)에서 지원됨을 참조하십시오.
scunliffe

46
String.trim()Node.js에서 즉시 사용할 수 있습니다.
Brad

47
nitpick : String.trim(), 클래스 메소드는 ES5 / Node.js에 없습니다. 대신 String.prototype.trim()인스턴스 메소드가 존재합니다. 사용법 : ' foo '.trim()아닙니다 String.trim(' foo ').
frontendbeauty

39
OMG, 2013 년이며 compat 모드의 IE9에는 String에 trim () 메서드가 없습니다!
dbrin

80
jQuery에서 $.trim(str)항상 사용할 수 있습니다.
Sygmoral

답변:


893

IE9 + 이후의 모든 브라우저에는 trim()문자열에 대한 메소드가 있습니다.

를 지원하지 않는 브라우저의 경우 MDNtrim() 에서이 polyfill을 사용할 수 있습니다 .

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)또한 사용 가능하며 손잡이 / 널을 미정.


이것 좀 봐:

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

87
jQuery에서 $.trim(str)항상 사용할 수 있습니다.
Sygmoral

481

해당 프레임 워크를 이미 사용중인 경우 jQuery 의 트림 이 편리합니다.

$.trim('  your string   ');

jQuery를 자주 사용하는 경향이 있으므로 문자열을 자르는 것이 자연 스럽습니다. 그러나 jQuery에 대한 백래시가있을 수 있습니까? :)


1
이것은 공백 (줄 바꿈) 만 다듬습니다. php trim처럼 작동하지 않습니다. 여기에서도 문자를 다듬을 수 있습니다
Jeffz

jQuery 3.5.0은 트림 방법을 감가 상각했습니다.
Herbert Peters

165

위의 많은 정답이 있지만 StringJavaScript 의 객체 .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/


128

있다 구현을 많이 사용할 수 있습니다. 가장 명백한 것은 다음과 같습니다.

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

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


29

이 질문은 3 년 전에 요청 된 것으로 알고 있습니다. 이제 String.trim()JavaScript로 기본적으로 추가되었습니다. 예를 들어 다음과 같이 직접 트리밍 할 수 있습니다.

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

3
즉, 버전에서는 작동하지 않습니다. 가능한 경우 jQuery 메소드 $ .trim (str)을 사용하십시오.
Ben Taliadoros

22

jQuery를 사용하는 경우 jQuery.trim()함수를 사용하십시오 . 예를 들면 다음과 같습니다.

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

20

기병 불량배 에는 벤치 마크 정보가 포함 된 11 가지 트림이 있습니다.

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

놀랍지 않게 정규 표현식 기반은 기존 루프보다 느립니다.


여기 내 개인적인 것이 있습니다. 이 코드는 오래되었습니다! 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);
}

14

네이티브 자바 스크립트 방법을 사용하십시오 String.trimLeft(), String.trimRight()하고 String.trim().


String.trim()IE9 + 및 기타 모든 주요 브라우저 에서 지원됩니다 .

'  Hello  '.trim()  //-> 'Hello'


String.trimLeft()String.trimRight()비표준 있지만에서 지원되는 모든 주요 브라우저 IE를 제외하고

'  Hello  '.trimLeft()   //-> 'Hello  '
'  Hello  '.trimRight()  //-> '  Hello'


그러나 polyfill을 사용하면 IE 지원이 쉽습니다.

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

1
@Brad True이지만 여전히 광범위한 브라우저를 지원합니다. 그리고 polyfill은 불일치를 처리합니다.
Web_Designer

1
답을 삭제하는 것을 고려해야합니다. 이미 여기에 다른 답변으로 5 배 이상 포함되지 않은 것은 추가하지 않습니다.
Brad

4
@ 브래드 나는 누군가 언급 trimLeft하거나 보지 못했다 trimRight.
Web_Designer

1
@Brad 가능한 경우 기본 JavaScript 구현을 선호합니다. 그 대답은 그 자체 lTrim()rTrim()방법을 구성합니다.
Web_Designer

1
@Brad 비표준이지만 일부 브라우저는 여전히이를 지원하므로 해당 브라우저에서는 폴리 필을 만들 필요가 없습니다.
Web_Designer

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

맷 듀 레그 로부터 뻔뻔 스럽게 도난 당했다 .



7

Angular js 프로젝트의 코드 자르기

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


5

단순히 코드를 사용하십시오

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

다른 사람과 비교하여 설명하는 가장 좋은 방법입니다. 그러나 조금 더 수정하면 replace함수 정규 표현식을 의미 합니다. 나는 그것을 완전히 얻지 못했습니다. 정규 표현식 부분을 조금 더 설명하고 싶습니까?
muneeb_ahmed

4

다음은 매우 간단한 방법입니다.

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

1
이 질문이 2009 년에 요청되었다는 것을 알고 있습니까? : D
GrafiCode

5
그렇습니다. 그러나 나는 누군가가 그것을 필요로 할 경우를 대비하여 내가 알고있는 것을 공유하기로 결정했다.
HenryDev

3
맞아요! 학습과 공유의 정신은 항상 좋은 것입니다!
HenryDev

3
"hello world"-> "helloworld"
Charlie Burns

2
이 답변은 잘못되었습니다. trim앞뒤 공백 (탭 및 기타 문자 포함) 만 제거해야합니다 . 대신 중간 공간을 포함하여 모든 공간이 제거됩니다.
mbomb007

4

사용 trim()문자열 기본 인 것은 가장 쉬운 방법이 될 수있다 :

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

console.log(trimmedFullName);


3

변수를 문자열로 선언하고 trim 함수를 사용할 수 있습니다.

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

2

오늘날 거의 모든 브라우저가을 지원합니다 String.prototype.trim().

당신은 이것을 다음과 같이 사용합니다 :

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

이 기능을 지원하지 않는 고대 브라우저를 계속 지원해야하는 경우 MDN에서 제안한 polyfill입니다 .

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

1

트림을 사용하는 lib가 있습니다. 다음 코드를 사용하여 해결했습니다.

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

1
이것은 좋은 해결책이 아닙니다. jQuery의 두 인스턴스가로드되는 경우 (태그가있는 일반적인 시나리오)를 고려하십시오. jQuery의 두 번째 인스턴스가로드되면 .trim()메소드 String.prototype.trim가 이미 설정된 네이티브 와 동일하게 설정되어 return jQuery.trim(this)스택 오버플로가 발생합니다.
브래드 M

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

이전 답변에서 flag 추가와 다릅니다 m.

플래그 m는 여러 선형의 텍스트를 검색합니다. 이 모드에서는 ^ $개행 문자 ( \n) 앞뒤에 패턴의 시작과 끝 표시 ( )가 삽입 됩니다.


1

일반 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));

1

이제 javascript에서 trim () 빌드.

let yourName = ' something   ';
let actualTrimmedName = yourName.trim();

콘솔이나 인쇄 코드 만 있으면 이름이 잘립니다.


새로운 정보를 추가하지 않는 답변을 게시하기 전에 질문에 대한 의견을 읽으십시오. 상위 몇 개의 의견은 모두이 내용을 설명하고 논의하며 많은 투표를합니다. 이 의견은 거의 8 년 전에 왔으며 질문 자체는 거의 11 살입니다.
로스 Gurbutt

0

어떤 버그를 숨길 수 있는지 모르겠지만 다음과 같이 사용합니다.

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

0

다음은 TypeScript에 있습니다.

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

기본 프로토 타입을 사용할 수 없으면 정규식으로 돌아갑니다.


0

.trim () 함수를 2008 년 JS 방식으로 사용할 수 없었을 때이 함수를 트리밍으로 작성했습니다. 일부 구형 브라우저는 여전히 .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);

-4

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
}

이에 대한 한 가지 디자인 결정은 하위 문자열을 사용하여 최종 캡처를 수행하는 것이 었습니다. s / \? : // (중기 캡처) 및 대체 조각은 다음과 같습니다.

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

이 impls에 두 가지 성능 베팅이 있습니다.

  1. 하위 문자열 구현이 원래 문자열의 데이터를 복사합니까? 그렇다면 첫 번째 문자열을 다듬을 필요가있을 때 첫 번째 정규 표현식 (부분적으로 가능할 수도 있음)과 하위 문자열 추출에서 두 번째 순회가 있습니다. 하위 문자열 구현은 원래 문자열 만 참조하므로 하위 문자열과 같은 작업은 거의 자유로울 수 있습니다. 십자 손가락

  2. 정규 표현식의 캡처가 얼마나 좋습니까? 중기, 출력 값은 매우 길 수 있습니다. 나는 모든 정규식 impls의 캡처가 수백 KB 입력 캡처에서 방해하지 않을 것이라고 은행에 준비가되지 않았지만 테스트하지 않았습니다 (너무 많은 런타임, 죄송합니다!). 두 번째는 항상 캡처를 실행합니다. 엔진이 타격을 가하지 않고이 작업을 수행 할 수 있다면, 아마도 위의 스트링-로핑 기술 중 일부를 사용하여 IT를 사용하십시오!


-7

IE9 + 및 기타 브라우저

function trim(text) {
    return (text == null) ? '' : ''.trim.call(text);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.