Reguläre Ausdrücke - Leerzeichen entfernen
Leif
- javascript
Hallo,
ich würde gerne den Wert eines Textfeldes mit Hilfe von regulären Ausdrücken soweit bearbeiten, dass alle Leerzeichen vor und nach dem Wert entfernt werden.
Das entfernen der Leerzeichen VOR dem Wert ist mir soweit gelungen:
function entferne_leerzeichen()
{
leerzeichen = /\s*/;
erlaubt = /\S/g;
anfang = wert.slice(0,erlaubt);
for(e = 0; e < formularebene.elements.length; e++)
{
wert = formularebene.elements[e].value;
if (leerzeichen.test(anfang))
formularebene.elements[e].value = wert.replace(leerzeichen,'');
}
}
Das entfernen der Leerzeichen NACH dem letzten erlaubten Zeichen ist mir bisher nicht gelungen. Der nachfolgende Ansatz funktioniert leider nicht:
ende = wert.slice(wert.length-1,wert.length);
if (leerzeichen.test(ende))
formularebene.elements[e].value = wert.replace(leerzeichen,'');
Müsste man das letzte Zeichen des Wertes nicht auch mit /\Z/; ansprechen können, statt wert.slice anzuwenden ??
Mit Grüßen
Leif
Hi Leif
wie wär s mit
while(meinText.search(/ /)!=-1)
{
meinText=meinText.replace(/\n/,"");
}
?, Dein Onkel
wie wär s mit
while(meinText.search(/ /)!=-1)
{
meinText=meinText.replace(/\n/,"");
}
Hi Onkel,
soweit gut - findet alle Leerzeichen - ob davor oder danach:
findet nur leider auch Leerzeichen in einem Wert, der aus zwei Wörtern besteht, zum Beispiel, wenn ein Textfeld, in den ein Name eingegeben werden soll, ein Doppelnamen eingegeben wird;
Bei Herrn "Müller Turgau" wäre dann auch das Leerzeichen zwischen "Müller" und "Turgau" weg ..... oder ?
Wie liesse sich das elegant vermeiden fragt da der Neffe und hofft, dass der Onkel am Ball bleibt ....
Mfg Neffe Leif
Hallo mein Neffe,
ich würde gerne den Wert eines Textfeldes mit Hilfe von regulären Ausdrücken soweit bearbeiten, dass alle Leerzeichen vor und nach dem Wert entfernt werden.
Nach welchem Wort?
Dein alter Onkel hat ne Sehschwäche und die Tiefe des Problems glatt überlesen. Nun verrat er mir doch in einfachen Worten, was er denn eigentlich vorhat.
Dein Onkel
Nach welchem Wort?
nach welchem Wert?
Lieber Onkel,
xxx"Müller Turgau"xxxxxx
"Müller Turgau" ist der Wert meines Textfeldes ( und ein Wein ... , aber das tut hier nichts zur Sache ).
Die Ixe ( x ) sind Leerzeichen in meinem Textfeld, die ich gerne mittels Regulären Ausdrücken vernichtet haben möchte ....
Der Neffe Nocheinmal
Lieber Neffe,
Dein alter Onkel hat n bißchen geknobelt (die Familie muss zusammenhalten): es funzt, aber es sieht nicht schön aus. Vieleicht ist die Lösung von Tobias besser?
xxx"Müller Turgau"xxxxxx
"Müller Turgau" ist der Wert meines Textfeldes ( und ein Wein ... , aber das tut hier nichts zur Sache ).
Die Ixe ( x ) sind Leerzeichen in meinem Textfeld, die ich gerne mittels Regulären Ausdrücken vernichtet haben möchte ....
var text=document.forms[0].elements[0].value;
var gesucht="Müller Thurgau";
for(i=text.search(gesucht)+gesucht.length;i<=text.length;i++){
if(text.substring(i,i+1).search(/\s/)==-1)
break;
}
for(j=text.search(gesucht);j>=0;j--){
if(text.substring(j-1,j).search(/\s/)==-1)
break;
}
document.forms[0].elements[0].value=
text.substring(0,j)+gesucht+text.substring(i,text.length);
Ich empfehle übrigends einen wunderbar leichten, aber trotzdem äußerst anregenden Rioja: Faustino V (Rose): Da hebt die Tante ab!
Gruß Dein Onkel
Ich empfehle übrigends einen wunderbar leichten, aber trotzdem äußerst anregenden Rioja: Faustino V (Rose): Da hebt die Tante ab!
Lieber Onkel,
Werde Deine Empfehlung an einen echten Weinkenner weiterreichen - ich selbst bin ein kulinarischer Barbar !
Halte es mit Wodka ohne Eis und Wasser (damit mehr reingeht ins Glas ! ), Frau und Kind haben mich schon verlassen, aber die haben sowieso nur gestört beim trinken !
;-> Scherz!
Habe eine Freundin die mittrinkt ....
Herzlichen Dank auch Dir für Deine familiäre Hilfe -
Der Neffe
Hallo Leif,
leerzeichen = /\s*/;
[...]
formularebene.elements[e].value = wert.replace(leerzeichen,'');
versuch doch mal alle Leerzeichen zwischen Begin des Strings und dem Text (bzw zwischen Text und Ende des Strings) durch einen Leerstring zu ersetzen:
var foo = ' nix ';
var oa = foo.replace(/^(\s*)(.*)$/,'$2');
var oe = oa.replace(/^(.*?)(\s*)$/,'$1');
alert("'"+oe+"'"); //gibt 'nix' aus.
das erste replace ersetzt alle führenden Leerzeichen durch nichts und das zweite die Leerzeichen am Ende durch nichts.
Grüße aus Nürnberg
Tobias
Hallo Tobias,
wunderbar - es klappt tadellos auf mein Script umgeschrieben:
wenn ichs nur noch verstehen würde ! Ich kenne zwar einzelne Rexp, aber in der Abfolge bin ich völlig überfordert !
:-/
Insbesondere die Aufgabe von "$1" und "$2" ist mir ein Rätsel.
Die REGXP-Beispiele hierzu in SELFHTML schaffen es leider nicht, mich aufzuklären ...
Kannst Du mir im Klartext auf die Sprünge helfen ?
foo.replace(/^(\s*)(.*)$/,'$2');
oa.replace(/^(.*?)(\s*)$/,'$1');
Besten Dank in jedem Fall und mit Gruss aus Hamburg
Leif
Hallo Leif.
Insbesondere die Aufgabe von "$1" und "$2" ist mir ein Rätsel.
Mit Hilfe der Klammern kannst du bis zu 10 Teilausdrücke zwischenspeichern, die man durch $n ansprechen kann.
Kannst Du mir im Klartext auf die Sprünge helfen ?
Ich versuche es mal.
foo.replace(/^(\s*)(.*)$/,'$2');
Am Anfang steht das Hütchen "^", ein so genannter Anker, der heißt, dass der Suchtext mit dem folgenden Muster beginnen muss. Weiter musst du wissen, dass "\s" für Whitespace steht. das Sternchen "*" ist ein Quantifier, der bedeutet, dass das davor stehende Zeichen gar nicht oder beliebig oft vorkommen darf. Dann musst du wissen, dass der Punkt "." für ein beliebiges Zeichen, das kein Zeilenumbruch ist, steht, hier wiederum gefolgt vom Sternchen - das hatten wir schon. Schließlich noch der Anker "$", der bedeutet, dass der Suchtext mit dem davor stehenden Muster enden muss.
Jetzt lies den Ausdruck so:
/ ^ (\s*) (.*) $ /
/beginne mit beliebig vielen Leerzeichen, danach beliebig viele andere Zeichen, bis der Suchtext zu Ende ist/
Die Klammerung bewirkt, dass du die beliebig vielen Leerzeichen in $1 und die beliebigen anderen Zeichen in $2 gespeichert hast.
oa.replace(/^(.*?)(\s*)$/,'$1');
Den kannst du dir dann selber erklären ;-)
Btw, ein Regulärer Ausdruck wäre im Beispielsfall ausreichend:
foo.replace(/^\s+(.+?)\s+$/,'$1');
würde auch 'nix' liefern ;-)
Zur Erklärung:
Der Quantifier "+" sucht nach einem oder mehreren Vorkommen des davor stehenden Zeichens, der Quantifier "?" fragt bei jedem gefundenen Zeichen ab, ob es nicht bereits auf das folgende Zeichen passt, wenn ja, wird mit dem nächsten Zeichen des Musters weitergesucht. Der oben stehende RegEx funktioniert natürlich nur, wenn innerhalb des Wortes keine Leerzeichen vorkommen.
Grüße
Siechfred
PS: http://www.rrz.uni-hamburg.de/RRZ/W.Wiedl/Skripte/CGI-Perl/Regulaere_Ausdruecke/index.html
Toll - was für eine Antwort!!!
Herzlichen Dank Siechfried; Deine Beschreibung wird ausgedruckt und zum Frühstück serviert.
Habe die hier genannten Lösungsansätze kombiniert, eingedampft und umgeschrieben und ausprobiert: folgende - knappe - Funktion tut es:
function entferne_leerzeichen()
{
for(e = 0; e < formularebene.elements.length; e++)
{
wert = formularebene.elements[e].value;
wert = wert.replace(/\s*/,'');
wert = wert.replace(/\s*$/,'');
formularebene.elements[e].value = wert;
}
}
Kann ich das so einsetzen d.h. ist es "wohlgeformt" und regelgerecht so ???
MFG Leif
Hallo Leif.
Habe die hier genannten Lösungsansätze kombiniert, eingedampft und umgeschrieben und ausprobiert: folgende - knappe - Funktion tut es:
[...]
Kann ich das so einsetzen d.h. ist es "wohlgeformt" und regelgerecht so ???
Auf die Schnelle sehe ich keine Fehler :-)
Grüße
Siechfred