Używam poniższego kodu, aby spróbować przyciąć ciąg w Javascript, ale otrzymuję błąd wspomniany w tytule:
function trim(str) {
return str.replace(/^\s+|\s+$/g,'');
}
Edytować:
Naprawiłem problem ... przepraszam, że powinienem był umieścić kod tak, jak go wywoływałem ... zdałem sobie sprawę, że przypadkowo przekazałem obiekt samego pola formularza, a nie jego wartość.
javascript
Brett
źródło
źródło
str
prawdopodobnie nie jest ciągiemregex
ciągu, co i tak może nie być dobre.str.toString().replace(/^\s+|\s+$/g,'')
zamiast tego.Odpowiedzi:
Domyślam się, że kod, który wywołuje twoją
trim
funkcję, w rzeczywistości nie przekazuje do niej ciągu.Aby rozwiązać ten problem, można dokonać
str
ciąg w następujący sposób:str.toString().replace(...)
... jak alper wskazał poniżej.
źródło
str.toString()
naprawił mój problem.str.toString()
jest rozwiązaniem tylko wtedy, gdy przekazujesz poprawną wartość, którą można z powodzeniem przekonwertować na ciąg; w moim przypadku w ogóle mijałem coś złego. :)prawdopodobne problemy:
num=35; num.replace(3,'three'); =====> ERROR
num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
źródło
To powinno działać.
function trim(str) { return str.toString().replace(/^\s+|\s+$/g,''); }
Jeśli chcesz tylko przyciąć ciąg. Możesz po prostu użyć „str.trim ()”
źródło
Nie przekazujesz łańcucha, w przeciwnym razie miałby on
replace
metodę. Mam nadzieję, żefunction trim(str) { return var.replace(blah); }
zamiast tego nie pisałeśreturn str.replace
.źródło
Prawdopodobnie powinieneś przeprowadzić walidację, zanim faktycznie wykonasz swoją funkcję:
function trim(str) { if(typeof str !== 'string') { throw new Error('only string parameter supported!'); } return str.replace(/^\s+|\s+$/g,''); }
źródło
Czy poprawnie nazwałeś swoją funkcję? To znaczy. czy to, co przekazujesz jako parametr, to naprawdę łańcuch?
W przeciwnym razie nie widzę problemu z Twoim kodem - poniższy przykład działa zgodnie z oczekiwaniami
function trim(str) { return str.replace(/^\s+|\s+$/g,''); } trim(' hello '); // --> 'hello'
Jeśli jednak wywołasz swoje functoin z czymś innym niż ciąg znaków, rzeczywiście otrzymasz powyższy błąd:
trim({}); // --> TypeError: str.replace is not a function
źródło
W przypadku liczby możesz spróbować przekonwertować na ciąg:
var stringValue = str.toString(); return stringValue.replace(/^\s+|\s+$/g,'');
źródło
Powinieneś użyć metody toString () skryptu java do konwersji na łańcuch znaków wcześniej, ponieważ metoda replace jest funkcją napisową.
źródło
Naprawiłem problem ... przepraszam, że powinienem był umieścić kod tak, jak go wywoływałem ... zdałem sobie sprawę, że przypadkowo przekazałem obiekt samego pola formularza, a nie jego wartość.
Mimo wszystko dziękuję za odpowiedzi. :)
źródło
upewnij się, że przekazujesz ciąg do metody „zamień”. Miałem ten sam problem i rozwiązałem go, przekazując ciąg. Możesz również sprawić, że będzie to string za pomocą metody toString ().
źródło