2011-01-23 59 views
66

Tôi đang sử dụng mã dưới đây để cố gắng cắt chuỗi trong Javascript nhưng tôi nhận được lỗi được đề cập trong tiêu đề:var.replace không phải là một chức năng

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

Edit:

Tôi cố định vấn đề .... xin lỗi tôi nên đã đặt mã về cách tôi đã gọi nó quá .... nhận ra tôi vô tình đã đi qua các đối tượng của lĩnh vực hình thức chính nó chứ không phải là giá trị của nó.

+10

'str' có lẽ không phải là một chuỗi –

+0

Là một sang một bên: dấu ngoặc kép bạn đang thiếu xung quanh' regex –

+4

@MrDisappointment Javascript có biểu thức chính quy theo nghĩa đen - chúng không cần phải là một chuỗi – Gareth

Trả lời

86

Tôi đoán là mã đang gọi chức năng trim của bạn là không thực sự chuyển một chuỗi vào đó.

Nếu bạn đăng mã đó, tôi có thể cập nhật câu trả lời của mình.

+11

'str.toString()' đã khắc phục được sự cố của tôi. – Alper

+1

str.toString() là câu trả lời đúng –

+0

Vâng, 'str.toString()' chỉ là giải pháp nếu bạn truyền một giá trị đúng có thể chuyển đổi thành công _to_ một chuỗi; trong trường hợp của tôi, tôi đã hoàn toàn sai lầm. :) – Brett

4

Bạn không chuyển chuỗi nếu không nó sẽ có phương thức replace. Tôi hy vọng bạn không gõ function trim(str) { return var.replace(blah); } thay vì return str.replace.

3

Bạn đã gọi chức năng của mình đúng chưa? I E. là điều bạn vượt qua như một tham số thực sự là một chuỗi?

Nếu không, tôi không thấy một vấn đề với mã của bạn - ví dụ dưới đây các công trình như mong đợi

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


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

Tuy nhiên, nếu bạn gọi functoin của bạn với một cái gì đó không theo chuỗi, bạn sẽ thực sự nhận được lỗi trên :

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

Tôi đã khắc phục vấn đề .... xin lỗi tôi cũng nên đặt mã về cách tôi cũng đang gọi nó .... nhận ra rằng tôi vô tình chuyển đối tượng của trường biểu mẫu thay vì giá trị của nó .

Cảm ơn câu trả lời của bạn. :)

+1

Bạn có thể chỉnh sửa câu hỏi, tốt hơn là trả lời cho chính mình. Oh, và trong khi bạn đang ở đó, chọn một trong những người tốt đẹp và chấp nhận câu trả lời của họ. :-) –

+2

@Christopher: Không; nếu anh ta tự giải quyết, anh ta nên viết câu trả lời và chấp nhận nó. Đó là thực hành tốt nhất SO. Đưa các giải pháp vào các câu hỏi và chấp nhận các câu trả lời tùy ý thì không. –

+0

@Tomalak: Có một số câu trả lời đúng ở đây, cũ hơn câu trả lời này. Tôi đồng ý rằng chấp nhận câu trả lời của riêng bạn nếu nó là câu trả lời đúng đầu tiên là một điều tốt ™, và chắc chắn không muốn đề xuất đưa giải pháp vào câu hỏi. –

5

Bạn có lẽ nên làm một số kiểm chứng thực trước khi bạn thực sự thực hiện chức năng của bạn:

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

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

vấn đề có thể xảy ra:

  • biến không được xác định;
  • biến là NUMBER (thay vì chuỗi);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • biến là đối tượng (thay vì string);
+1

Cảm ơn Đối với điều này, tôi đã phải đối mặt với một vấn đề, ở đâu, tôi đã nhận được String trong một đối tượng typeof. Tôi đã chuyển đổi đối tượng đó với toString(). Và nó đang hoạt động! Cảm ơn bạn! –

2

Bạn nên sử dụng toString() Phương thức tập lệnh java để chuyển đổi thành chuỗi trước bởi vì phương thức thay thế là một hàm chuỗi.

7

Thay thế sẽ không thay thế số. Nó chỉ thay thế các chuỗi. Điều này sẽ làm việc.

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

Nếu bạn chỉ muốn cắt chuỗi. Bạn chỉ có thể sử dụng ".trim()"

4

Trong trường hợp của một số bạn có thể thử để chuyển sang chuỗi:

var stringValue = str.toString(); 
return stringValue.replace(/^\s+|\s+$/g,''); 
Các vấn đề liên quan