var.replace는 함수가 아닙니다


133

Javascript에서 문자열을 자르려고 아래 코드를 사용하고 있지만 제목에 언급 된 오류가 발생합니다.

function trim(str) {
    return str.replace(/^\s+|\s+$/g,'');
}

편집하다:

문제를 해결했습니다 .... 죄송합니다. 코드를 어떻게 호출했는지에 대한 코드를 넣어야합니다 .... 실수로 양식 필드 자체의 객체가 값 대신 전달되는 것을 깨달았습니다.


21
str아마 문자열이 아닙니다
Pekka

제쳐두고 : regex문자열 자체 주위에 따옴표가 누락되어 어쨌든 좋지 않을 수 있습니다.
Grant Thomas

4
@MrDisappointment Javascript에는 문자 그대로 정규 표현식이 있습니다. 문자열 일 필요는 없습니다.
Gareth

1
@Closure : 당신은 찾을 수 있습니다 (또는 시작하고자하는)을 토의 english.stackexchange.com/search?q=contractions
user113716

15
str.toString().replace(/^\s+|\s+$/g,'')대신 사용하십시오 .
M Rostami

답변:


213

내 생각에는 trim함수를 호출하는 코드가 실제로 문자열을 전달 하지 않는 것입니다.

이 문제를 해결하려면, 당신은 할 수 있습니다 str이 같은 문자열을 : str.toString().replace(...)
...로 alper은 아래 지적했다.


39
str.toString()내 문제를 해결했다.
alper

글쎄, str.toString()당신은 성공적으로 변환 할 수있는 올바른 값 통과하는 경우에만 솔루션 문자열; 제 경우에는 잘못된 것을 모두 전달했습니다. :)
Brett

또한 동일한 오류가 발생하고 toString ()을 시도했지만 오류가 발생했습니다. "toString"속성을 정의 할 수없고 "바꾸기"에 대해 동일합니다
Hitesh Kumar

90

가능한 문제 :

  • 변수는 문자열이 아닌 NUMBER입니다 .
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • 변수는 문자열이 아닌 객체입니다 .
  • 변수가 정의되지 않았습니다.

1
감사합니다.이 문제에 직면했습니다. 해당 객체를 toString ()으로 변환했습니다. 그리고 그것은 작동하고 있습니다! 감사합니다!
Vishwajit R. Shinde

14

바꾸기는 숫자를 대체하지 않습니다. 문자열 만 바꿉니다.

이 작동합니다.

function trim(str) {
    return str.toString().replace(/^\s+|\s+$/g,'');
}

문자열 만 다듬고 싶을 때. "str.trim ()"을 사용하면됩니다


6

문자열을 전달하지 않으면 replace메소드가 있습니다. function trim(str) { return var.replace(blah); }대신 입력 하지 않았기를 바랍니다 return str.replace.


6

실제로 함수를 실행하기 전에 몇 가지 유효성 검사를 수행해야합니다.

function trim(str) {
    if(typeof str !== 'string') {
        throw new Error('only string parameter supported!');
    }

    return str.replace(/^\s+|\s+$/g,'');
}

5

함수를 올바르게 호출 했습니까? 즉. 매개 변수로 전달하는 것이 실제로 문자열입니까?

그렇지 않으면 코드에 문제가 표시되지 않습니다. 아래 예는 예상대로 작동합니다.

function trim(str) {
    return str.replace(/^\s+|\s+$/g,'');
}


trim('    hello   ');  // --> 'hello'

그러나 문자열이 아닌 것으로 functoin을 호출하면 실제로 위의 오류가 발생합니다.

trim({});  // --> TypeError: str.replace is not a function

5

숫자의 경우 문자열로 변환하려고 할 수 있습니다.

var stringValue = str.toString();
return stringValue.replace(/^\s+|\s+$/g,'');

3

replace 메소드는 문자열 함수이므로 문자열로 변환하려면 Java 스크립트의 toString () 메소드를 사용해야합니다.


1

문제를 해결했습니다 .... 죄송합니다. 코드를 어떻게 호출했는지에 대해 코드를 작성해야합니다 .... 실수로 값 필드가 아닌 양식 필드 자체의 객체를 전달하고 있음을 깨달았습니다.

어쨌든 귀하의 답변에 감사드립니다. :)


1
질문을 편집 할 수 있습니다. 자신에게 답하는 것보다 낫습니다. 아, 그리고 당신이 그것을하는 동안 좋은 사람들 중 하나를 선택하고 그들의 대답을 받아들입니다. :-)
Christopher Creutzig

2
@ 크리스토퍼 : 아니요; 그가 스스로 해결했다면, 그의 답변을 작성하고 받아 들여야합니다. 그렇게하는 것이 가장 좋습니다. 질문에 해결책을 제시하고 임의의 대답을 받아들이는 것은 아닙니다.
궤도에서 가벼움 경주

@ Tomalak : 여기에 오래된 것보다 몇 가지 정답이 있습니다. 본인이 정답 인 경우 자신의 답변을 받아들이는 것이 좋으며, 문제에 대한 해결책을 제시하고 싶지 않다는 데 동의합니다.
Christopher Creutzig

@Christopher : 허용 된 답변은 OP가 사용한 솔루션을 포함하는 답변이어야합니다.
궤도에서 가벼움 경주

0

문자열을 "바꾸기"메소드로 전달하십시오. 같은 문제가 있었고 문자열을 전달하여 해결했습니다. toString () 메서드를 사용하여 문자열로 만들 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.