Michael Rundel: ucfirst mit RegExp

Liebe Freunde,

Wie kann ich in allen Worten in einem String den ersten Buchstaben (mit Hilfe von RegExp)groß machen?

folgender Ansatz hat nicht funktioniert:

------------------------------------------------------
<HTML><HEAD><TITLE> New Document </TITLE>
 <SCRIPT LANGUAGE="JavaScript">
  function ucfirst(str) {
   return str.replace(/\b(\w+)\b/g, RegExp.$1.charAt(0).toUpperCase()+RegExp.$1.slice(1).toLowerCase());
  }
 </SCRIPT>
</HEAD><BODY><form name="feedback" method="POST" action="">
Name: <input type="text" name="Name" value="" size="30" onBlur="this.value = ucfirst(this.value)">
<form></BODY></HTML>
------------------------------------------------------

Vielen Dank
Michael

  1. wie sieht es mit:

    replace(/\b(.)*\b/g aus?

    bye alex

    1. wie sieht es mit:

      replace(/\b(.)*\b/g aus?

      bye alex

      sorry alex, aber deine Vorschläge funktionieren leider nicht...
      lg
      Michi

      Ich frage mich, ob es nicht trotzdem eine einzeilige RegExp Lösung für das Problem gibt...

  2. nachtrag

    return str.replace(/\b(.)(*)\b/g, RegExp.$1.toUpperCase()+RegExp.$2.toLowerCase());

    ...

    bye alex

  3. /*
        gruss Michael,

    regulaere ausdruecke sind schon sehr maechtige und elegante hilfsmittel,
        da es sich aber in erster linie um suchmuster handelt, gibt es fuer komplexe
        _suchen_und_ersetzen_aufgaben_ nicht _die_eine_killer-RegExp_;

    es ist also durchaus auch guter stil, sich dem ziel mit einem mix aus
        suchmustern und test-schleifen zu naehern:
    */

    var testString = "\nliebe freunde,\n\nwie kann ich in allen worten in einem string den ersten buchstaben (mit hilfe von regExp)groß machen?\n\nfolgender ansatz hat nicht funktioniert:\n";
        alert(testString);
    //  var testStringArray = testString.split(/\W/); // schnelltest fuer einen loesungsansatz;
    //  var testStringArray = testString.split(/\s/); // schnelltest fuer einen loesungsansatz;
    //  alert("["+testStringArray.join("]\n[")+"]");  // schnelltest fuer einen loesungsansatz;
        var testStringArray = new Array();
        var regExpression = /([^\W]*\W)/; // im gegensatz zu "String.split" bleiben hier alle zeichen aus "testString" erhalten;
        while (regExpression.test(testString)) {
            testStringArray[testStringArray.length] = (regExpression.exec(testString)[1]); // MSIE5 kennt "Array.push" nicht;
            testString = testString.replace(regExpression,""); // vehindert die gefangennahme durch eine endlosschleife;
        }
        alert("["+testStringArray.join("]\n[")+"]");
        for (var i=0;i<testStringArray.length;i++) {
            testString = testStringArray[i];
            testStringArray[i] = testString.charAt(0).toUpperCase() + testString.substring(1); // es muss nicht immer RegExp sein;
        }
        testString = "[" + testStringArray.join("]\n[") + "]";
        alert(testString);
        testString = testStringArray.join("");
        alert(testString);
    //
    //  getestet auf NN4.x, mozilla, opera7, msie5;

    by(t)e by(t)e - peterS. - pseliger@gmx.net

    --
    sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)