Sven: Erkennen, ob String mehr Buchstaben oder mehr Zeichen enthält?

Hallo,

ich würde gerne mit einem Script erkennen können, ob ein String mehr Buchstaben/Zahlen enthält, oder zum großen Teil aus Zeichen besteht (Punkte, Striche, Dollarzeichen, und und...).

Ich hab mir dafür überlegt: Ich trage alle Buchstaben des Alphabets, Umlaute und Zahlen in ein Array ein und zähle dann mittels for-Schleife wie oft jeder von ihnen im String vorkommt. Das vergleiche ich dann mit der Gesamtlänge des Strings und schon hätte ich die Lösung.

Oder gibts noch einen einfacheren Weg?

Hintergrund: Ich habe ein Gästebuch. Dort werden Smiley-Kombinationen wie :-) in grafische Smileys umgewandelt. Grade die weiblichen User posten aber gerne ASCII-Bildchen, und dadrin würden Smileys nur stören. Im Moment kann man bei jedem Eintrag anklicken, ob man grafische Smileys für diesen Eintrag aktiviert haben möchte oder nicht. Ich würde das jedoch gerne automatisch erkennen lassen.

Daher mein oben beschriebener Gedanke. Was meint ihr?

Grüße
Sven

  1. Grüße,
    es wäre vllt wirklich der weg für regular-expression - oder kommen die nicht in frage?
    MFG
    bleicher

    1. Hi,

      es wäre vllt wirklich der weg für regular-expression - oder kommen die nicht in frage?

      wie lautet denn das Muster für "mehr von Zeichenklasse X als von Zeichenklasse Y"?

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Grüße,

        wie lautet denn das Muster für "mehr von Zeichenklasse X als von Zeichenklasse Y"?

        löschen der zeichen klasse A aus der kopie 1, löschen der zeichen der klasse 2 aus der kopie 2, längenvergleich?

        MFG
        bleicher

        1. Hello,

          wie lautet denn das Muster für "mehr von Zeichenklasse X als von Zeichenklasse Y"?

          löschen der zeichen klasse A aus der kopie 1, löschen der zeichen der klasse 2 aus der kopie 2, längenvergleich?

          Das ist zu kompilziert für Cheatah :-P

          Liebe Grüße aus Syburg bei Dortmund

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hi!

            [...]längenvergleich?

            Das ist zu kompilziert für Cheatah :-P

            Ach Quatsch. Der hat nur keinen Laengenvergleich noetig...

            --
            "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
                  - T. Pratchett
    2. Guten Tag,

      es wäre vllt wirklich der weg für regular-expression - oder kommen die
      nicht in frage?

      1. preg_match_all() auf Zeichen, die nicht a-z oder A-Z sind (optional weitere Zeichen), Ergebnisse werden in einem Array gespeichert
      2. Länge der Gesamtzeichenkette bestimmen
      3. Anzahl der gefundenen Einträge von Länge der Gesamtzeichenkette abziehen
      = Anzahl der Komplementärzeichen

      Zum Beispiel so:

      <?php  
      $s="sfas45345cq3?43534a=§)";  
      preg_match_all("/[a-z]{1}/i", $s, $r);  // Findet a-zA-Z  
      echo strlen($s) - sizeof($r[0]);  
      ?>
      

      Gruß
      Christoph Jeschke

      --
      Zend Certified Engineer
  2. Hi,

    ich würde gerne mit einem Script erkennen können, ob ein String mehr Buchstaben/Zahlen enthält, oder zum großen Teil aus Zeichen besteht (Punkte, Striche, Dollarzeichen, und und...).

    da auch Buchstaben Zeichen sind, solltest Du vielleicht einen anderen Begriff verwenden. Ich schlage "Sonderzeichen" vor.

    Ich hab mir dafür überlegt: Ich trage alle Buchstaben des Alphabets, Umlaute und Zahlen in ein Array ein und zähle dann mittels for-Schleife wie oft jeder von ihnen im String vorkommt. Das vergleiche ich dann mit der Gesamtlänge des Strings und schon hätte ich die Lösung.

    Oder gibts noch einen einfacheren Weg?

    Ja, den gibt es.

    Hintergrund: Ich habe ein Gästebuch. Dort werden Smiley-Kombinationen wie :-) in grafische Smileys umgewandelt. Grade die weiblichen User posten aber gerne ASCII-Bildchen, und dadrin würden Smileys nur stören. Im Moment kann man bei jedem Eintrag anklicken, ob man grafische Smileys für diesen Eintrag aktiviert haben möchte oder nicht. Ich würde das jedoch gerne automatisch erkennen lassen.

    Das ist nicht erwartungskonform. Der Nutzer erkennt sehr schnell, dass er sich auf diese Einstellung nicht verlassen kann, sondern das System schlicht und ergreifend _irgendwas_ tut, und wird folgerichtig Angst vor Bedienungsfehlern bekommen - der Worst Case der Usability. Wenn Du eine solche Erkennung einbaust, dann mache es so geschickt, dass der Nutzer sie a) erfährt, b) die Entscheidung über das Verhalten des Systems weiterhin selbst treffen kann und c) möglichst wenig im gewohnten Ablauf gestört wird.

    Daher mein oben beschriebener Gedanke. Was meint ihr?

    Ich meine, Du solltest clientseitig statt serverseitig arbeiten.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      Das ist nicht erwartungskonform. Der Nutzer erkennt sehr schnell, dass er sich auf diese Einstellung nicht verlassen kann, sondern das System schlicht und ergreifend _irgendwas_ tut, und wird folgerichtig Angst vor Bedienungsfehlern bekommen - der Worst Case der Usability. Wenn Du eine solche Erkennung einbaust, dann mache es so geschickt, dass der Nutzer sie a) erfährt, b) die Entscheidung über das Verhalten des Systems weiterhin selbst treffen kann und c) möglichst wenig im gewohnten Ablauf gestört wird.

      Daher mein oben beschriebener Gedanke. Was meint ihr?

      Ich meine, Du solltest clientseitig statt serverseitig arbeiten.

      Mit "Clientseitig" meinst du clientseitig-automatisch (JavaScript) oder vom Benutzer manuell einstellbar (Radiobuttons: Smileys an/aus)?

      Ich fand es ja etwas verwirrend für den Benutzer, auswählen zu können, ob er für diesen Eintrag nun grafische Smileys aktiviert haben will. Ich könnte mir vorstellen, dass da auf jedenfall Fragezeichen im Kopf des Nutzers aufgehen (Was soll das denn?). Und auf eine umfangreiche Erklärung hab ich verzichtet... da ich mal davon ausgehe, dass mindestens 50% der Nutzer mit dem Begriff "ASCII-Bildchen" nicht viel anfangen können. Prozentual gesehen sind es ja doch sehr wenig Nutzer(innen) die das nutzen... aber die bringen eben auch Leben in die Bude, weswegen ich darauf schon Rücksicht nehmen möchte.

      Hmmm...

      Grüße
      Sven

      1. Hi Lars!

        Ich meine, Du solltest clientseitig statt serverseitig arbeiten.
        Mit "Clientseitig" meinst du clientseitig-automatisch (JavaScript) oder vom Benutzer manuell einstellbar (Radiobuttons: Smileys an/aus)?

        Beides. Wenn der Text bestimmte Kriterien erfüllt (oder auch nicht), dann wird der Radiobutton gesetzt (oder auch nicht).

        Ich fand es ja etwas verwirrend für den Benutzer, auswählen zu können, ob er für diesen Eintrag nun grafische Smileys aktiviert haben will.

        Verwirrend ist es, wenn der Server mal so oder mal so reagiert. Meiner Meinung nach ist der Begriff "grafische Smileys" oder "Emoticons" bekannt genug, um einen Radiobutton mit entsprechendem Label anzubieten.

        Außerdem gibt es auch Menschen, die einen relativ kurzen Post wie
        ----------------------
        HAHA!
        =) =) =) =) =) =)
        ----------------------
        schreiben. Die würdest du mit deiner Variante diskriminieren - mal davon abgesehen, dass sie es vielleicht verdient hätten. ;-)

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  3. Hi!

    Interessante Idee. My 2 cents:

    Lass es einfach. Das macht die Bedienung nur komplizierter. Woher soll das Tool denn nun wissen, dass '... ist schon abgelaufen (9/2008)' das 8) nicht in einen Smiley umsetzen soll? Ich finde es gut, dass du dem User dei Wahl laesst, dann schreibt er bewusster. Aber eien Automatik kann eigentlich nur versagen.

    Das Beispiel oben hatte ich naemlich heute in einer ICQ Konversation mit meiner Schwester. Wir beide (ich nutze Miranda, sie ICQ) haben dann einen Smiley gesehen und sie hat die 8 geraten. Erklaer mir aber mal, woran Deine Funktion an diesem Beispiel erkennen soll dass dort kein Smiley hingehoert.

    --
    "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
          - T. Pratchett