2013-02-26 16 views
21

Mam projekt, w którym oceniany jest jakiś plik JavaScript. Ponieważ ciąg musi być zmieniony (tylko pojedyncze cudzysłowy), napisałem dokładnie ten sam kod w funkcji testowej. Mam następujący kawałek dość prostego kodu JavaScript:Wywoływanie pojedynczych cudzysłowów w łańcuchu JavaScript do oceny JavaScript

function testEscape() { 
    var strResult = ""; 
    var strInputString = "fsdsd'4565sd"; 

    // Here, the string needs to be escaped for single quotes for the eval 
    // to work as is. The following does NOT work! Help! 
    strInputString.replace(/'/g, "''"); 

    var strTest = "strResult = '" + strInputString + "';"; 
    eval(strTest); 
    alert(strResult); 
} 

I chcę go ostrzec, mówiąc: fsdsd'4565sd.

+0

Stosunkowo bezpieczniejszym podejściem może być 'var strResult = eval (" (+ + strInputString + ")"); ". Również 'STRING' jest niezmienne, więc' string.replace() '** zwraca ** zastąpiony wynik, a nie ** modyfikuje ** ciąg. – Passerby

+1

Czy tego oczekujesz http://jsfiddle.net/ebTtp/ – ssilas777

Odpowiedz

62

Chodzi o to, że nie .replace() się zmodyfikować ciąg, więc trzeba napisać coś takiego:

strInputString = strInputString.replace(... 

Wydaje się również, jak nie robisz postać ucieczce prawidłowo. Następujące pracował dla mnie:

strInputString = strInputString.replace(/'/g, "\\'"); 
+0

Tak, to jest to! Dziękuję, wiedziałem, że to był głupi błąd. –

+0

Dla pozostałych mohikanów ActionScript, działa to: var greet: String = "l'advancement"; greet = greet.split ("'"). Join ("\\" "); ExternalInterface.call ("function() {console.log (" "+ pozdrawiam +" ')} "); – Stepan

-3
strInputString = strInputString.replace(/'/g, "''"); 
2

Zgadzam się, że to var formattedString = string.replace(/'/g, "\\'"); działa bardzo dobrze, ale ponieważ kiedyś ten fragment kodu w PHP z ramami Prado (można zarejestrować skrypt js w klasie PHP) Potrzebowałem tej próbki pracującej w podwójnych cudzysłowach.

Rozwiązaniem, które zadziałało, jest konieczność umieszczenia trzech \ i uniknięcia podwójnych cudzysłowów. "var string = \"l'avancement\"; var formattedString = string.replace(/'/g, \"\\\'\");"

Odpowiadam na to pytanie, ponieważ miałem problem ze stwierdzeniem, że trzy prace to: \.

Powiązane problemy