David Mously: Grossbuchstaben erzeugen

Hallo Forum,

ich habe ein kleines Problem:

ich möchte erreichen, dass ein Name, der in ein Formular-
feld "realname" eingetragen wird, "gesäubert" wird, d.H.

  1. Zuerst soll der ganze Text in Kleinbuchstaben umgewandelt werden,

  2. dann soll der erste Buchstabe in einen Großbuchstaben
       umgewandelt werden,

  3. jeder Buchstabe, der nach einem Leerzeichen kommt, soll ebenfalls
       groß geschrieben werden.

Punkt 1) und 2) funktionieren:

nameComp = document.eingabe.realname.value.toLowerCase();

nameComp = document.eingabe.realname.value.substr(0,1).toUpperCase() +document.eingabe.realname.value.substr(1,(document.eingabe.realname.value.length-1));

Punkt 3) habe ich folgendermaßen probiert:

for(i=0;i<8;++i)
{
whitespace = nameComp.search(/\s/);
if(whitespace != -1)
{
nameComp = nameComp.substring(0,whitespace+1).replace(/\s/,"_-_") + nameComp.substr(whitespace+1,1).toUpperCase() +document.eingabe.realname.value.substr(whitespace+2,(document.eingabe.realname.value.length-1));
}
}
for(i=0;i<8;++i)
{
nameComp = nameComp.replace(/_-_/," ");
}

Insgesamt achtmal wird der String auf ein Leerzeichen hin durchsucht,
wird eins gefunden, wird das folgende Zeichen in einen Großbuchstaben
gewandelt, und das Leerzeichen durch "_-_" ersetzt, damit bei nächsten
Suchlauf das nächste Leerzeichen gefunden werden kann.

Anschließend werden alle "_-_" wieder durch ein Leerzeichen ersetzt.

Das klappt so halbwegs, wenn jemand allerdings mehrere Leerzeichen
zwischen zwei Namensteilen eingibt, wird z.B. aus "bernd   blindtext"
plötzlich "Bernd Indext" oder ähnlicher Blödsinn.

Weiss jemand, warum? Oder gibt es zu diesem Problem vielleicht eine
1000-fach erprobte Standardlösung??? ;-) Im Forumsarchiv jedenfalls
habe ich sie nicht gefunden...

Vielen Dank für Eure Hilfe
David

  1. Hallo

    Versuch doch einfach eine ganz normale for-schleife
    (In Pseudocode)

    Für alle Zeichen im String
      Schau, ob Zeichen Leerzeichen ist,
        wenn ja
          Für alle weiteren Zeichen
            Schau, ob Zeichen Leerzeichen ist
            wenn nein, Zeichen großschreiben; innere Schleife beenden
      
    Eventuell muß man dann noch ein paar Sonderfälle ("","   ",usw) berücksichtigen

    Henryk Plötz
    Grüße von der Ostsee

  2. Hi,

    Ohne Dein Programm genau analysiert zu haben, warum nicht einfach folgende Lösung:

    input=document.eingabe.realname.value;
    nameComp='';
    for(i=0;i<input.length;i++)
      {
      if(i==0 input.charAt(i-1)==' ')
        nameComp+=input.charAt(i).toUpperCase();
      else nameComp+=input.charAt(i);
      }

    Naja, nicht getestet...

    Gruß
    Steffen