2009-08-05 14 views
1

Ich habe eine Funktion, die gut in Actionscript 2 funktioniert, außer dass es nur ein Zeichen ersetzen kann. Ich brauche es, um sich mehr wie str_replace in PHP zu verhalten und ein Array von Zeichen zu ersetzen.AS2 Zeichenfolge ersetzen für Array von Zeichen?

Hier ist der Code, den ich jetzt habe, er ersetzt einfach ein Leerzeichen() durch einen Bindestrich (-) in einem String.

function str_replace(str){ 
    return str.split(" ").join("-"); 
} 

Was ich zu tun versuchen, ist ersetzen Leerzeichen, Kommas und Kombinationen von Zeichen (ex. Leerzeichen und Komma) von Actionscript-Strings für die Verwendung in URLs.

So folgt aus:

Shop, Dine, Play 

Wird dies geworden:

Shop-Dine-Play 

sind Anregungen sehr dankbar! :)

Antwort

1

Für Ihren Fall wäre der einfachste Weg, eine Sequenz Ihrer Split/Join-Befehle in der Reihenfolge der längsten bis kürzesten Ersetzung auszuführen.

zB

txt = txt.split(", ").join(-)

txt = txt.split(",").join(-)

txt = txt.split(" ").join(-)

Damit Sie nicht Geschäft bekommt - Essen - Spielen Sie ersetzen“, "zuerst, dann", " oder " ".

+0

das hat super funktioniert! Ich habe es nur leicht modifiziert, um mit meiner Funktion zu arbeiten: str = str.split (",") .join ('-'); –

0

Funktioniert das für Sie?

function replace(txt:String, fnd:String, rep:String):String 
{ 
    return txt.split(fnd).join(rep); 
} 

trace(replace("Shop, Dine, Play", ", ", "-"));//Shop-Dine-Play 

dh die Zeichenfolge, die Sie für die Suche mehr als ein Zeichen enthalten kann, in diesem Fall „“

0

Wenn Sie ein Array von Zeichen mit einem anderen Array von Zeichen ersetzen möchten, können Sie wie etwas tun

function replace(str:String, toFind:Array, toReplace:Array):String 
{ 
    if(toFind.length != toReplace.length) 
     throw new Error("Error : Find and replace array must match in length"); 


    for(var i:Number = 0; i < toFind.length; i++) 
    { 
     str = str.split(toFind[i]).join(toReplace[i]); 
    } 

    return str; 
} 

Und es wie folgt verwenden:

replace("abc", ["a", "b", "c"], ["c", "b", "a"]); //result cba 

Beachten sie, dass diese rea ist Es ist nicht optimal, wenn Sie viele Zeichen in einer langen Zeichenfolge ersetzen möchten.

0

@Ryan - mein Kommentar verloren alle Formatierungen, also hier ist es wieder. Und ich habe gerade festgestellt, dass es die gleiche str_replace-Funktion ist, die ich ursprünglich bereitgestellt habe. Aber es funktioniert!

as2 oder as3? In beiden Fällen können Sie einfach die Funktion str_replace() mit Ihrem dynamischen Text als Parameter innerhalb Ihrer onPress()-Funktion in AS2 aufrufen oder auf Listener in AS3 klicken. Ich habe den str_replace Teil in AS3 nicht wirklich getestet, aber es sollte funktionieren - Beispiel unten.

private var newString:String; 

// elsewhere in your document 
private function str_replace(str:String):String { 
    return str.split(" ").join("-"); 
} 
private function textClickListener(e:MouseEvent) { 
    if(e.target is TextField){ 
     newString = str_replace(e.target.text); 
     trace(newString); // outputs theTextField.text; 
    } 
} 
theTextField.addEventListener(MouseEvent.CLICK, textClickListener); 
// this assumes you have a dynamic text field named 'theTextField' 
Verwandte Themen