Frank: RegEx und Leer-/Sonderzeichen

Hallo zusammen,

ich bin kurz vorm verzweifeln. Ich suche eine Regular Expression welche mir einen String auf auf folgende Eigenschaften prüft:
1. String darf aus Zahlen und Buchstaben bestehen!
2. String darf nicht nur aus Zahlen bestehen!

Soweit habe ich es:

  
$regEx = "[A-Za-z0-9][^0-9]";  
$string = 'String12345';  
echo ereg($regEx, $string) ? 'gültig' : 'nicht gültig';  

3. String darf keine Leer- oder Sonderzeichen enthalten!

Und an der Stelle komme ich nicht weiter.

  
$regEx = "[A-Za-z0-9][^0-9]";  
$string = 'String 12345 <>';  
echo ereg($regEx, $string) ? 'gültig' : 'nicht gültig';  

darf nicht gültig sein, da Leer- und Sonderzeichen enthalten sind.

Ich habe schon mit [\S], [\s], [^ ], usw. experimentiert. Komme aber zu keinem Ergebnis.

Ich hoffe Ihr könnt mir helfen.

Viele Grüße
Frank

  1. Ich hoffe Ihr könnt mir helfen.

    in erster linie, versuchs mit perl-kompatibler syntax - posix ist imho schwerer zu verstehen und lt. allgemeiner meinung nicht so leistungsfähig

    preg_match() ist in diesem fall praktikabler

    1. preg_match() ist in diesem fall praktikabler

      meinst du so?

        
      $regEx = "#[A-Za-z0-9][^0-9]#";  
      $string = 'String 12345 <>';  
      echo preg_match($regEx, $string) ? 'gültig' : 'nicht gültig';  
      
      

      Ergibt noch immer "gültig". Und das ist falsch.

      1. @@Frank:

        $regEx = "#[A-Za-z0-9][^0-9]#";
        $string = 'String 12345 <>';
        echo preg_match($regEx, $string) ? 'gültig' : 'nicht gültig';

        
        >   
        > Ergibt noch immer "gültig". Und das ist falsch.  
          
        Nö, das stimmt schon. Der Sting 'String 12345 <>' enthält an irgendeiner Stelle ein Zeichen aus [A-Za-z0-9] gefolgt von einem beliebigen Zeichen, das keine Ziffer ist.  
          
        Live long and prosper,  
        Gunnar
        
        -- 
        “New Jersey Hall of Fame? […] But then I ran through the list of names: Albert Einstein, Bruce Springsteen... my mother's going to like that. […] it's the only time she's going to hear those two names mentioned in the same sentence, so I'm going to enjoy it.” (Bruce Springsteen when inducted into the New Jersey Hall of Fame, 2008-05-04)
        
        1. Nö, das stimmt schon. Der Sting 'String 12345 <>' enthält an irgendeiner Stelle ein Zeichen aus [A-Za-z0-9] gefolgt von einem beliebigen Zeichen, das keine Ziffer ist.

          Da hab ich wohl was grundlegendes falsch verstanden. Aber wie bekomme ich jetzt das Problem gelöst?

          1. String darf aus Zahlen und Buchstaben bestehen!
          2. String darf nicht nur aus Zahlen bestehen!
          3. String darf keine Leer- oder Sonderzeichen enthalten!

          1. geht das überhaupt mit einer einzigen Expression oder muss ich mehrere nacheinander abfragen?

            1. geht das überhaupt mit einer einzigen Expression oder muss ich mehrere nacheinander abfragen?

              machs mit mehreren hintereinander, wenn das funktioniert, nimm die einzelnen ausdrucke und kombiniere sie

              dagegen spricht ja ansich auch nichts?

            2. @@Frank:

              geht das überhaupt mit einer einzigen Expression

              Ja.

              oder muss ich mehrere nacheinander abfragen?

              Nein.

              Live long and prosper,
              Gunnar

              --
              “New Jersey Hall of Fame? […] But then I ran through the list of names: Albert Einstein, Bruce Springsteen... my mother's going to like that. […] it's the only time she's going to hear those two names mentioned in the same sentence, so I'm going to enjoy it.” (Bruce Springsteen when inducted into the New Jersey Hall of Fame, 2008-05-04)
  2. @@Frank:

    ich bin kurz vorm verzweifeln. Ich suche eine Regular Expression welche mir einen String auf auf folgende Eigenschaften prüft:

    1. String darf aus Zahlen und Buchstaben bestehen!

    Mit „Zahlen“ meint du sicher Ziffern. Und mit Buchstaben anscheinend 'A' bis 'Z' und 'a' bis 'z', nicht jedoch 'Ä', 'é', 'ß' u. dgl. Sind das keine Buchstaben?

    1. String darf nicht nur aus Zahlen bestehen!

    Soweit habe ich es:
    $regEx = "[A-Za-z0-9][^0-9]";

    Zuerst möchtest du dich über die Bedeutung von '+' und '*' informieren, dann über die von '^' (außerhalb von []) und '$'.

    Dann sollte es dir gelingen, folgendes aufzuschreiben: Stringanfang gefolgt von beliebig vielen Buchstaben und Ziffern gefolgt von einem Buchstaben gefolgt von beliebig vielen Buchstaben und Ziffern gefolgt von Stringende.

    Live long and prosper,
    Gunnar

    --
    “New Jersey Hall of Fame? […] But then I ran through the list of names: Albert Einstein, Bruce Springsteen... my mother's going to like that. […] it's the only time she's going to hear those two names mentioned in the same sentence, so I'm going to enjoy it.” (Bruce Springsteen when inducted into the New Jersey Hall of Fame, 2008-05-04)
    1. nicht jedoch 'Ä', 'é', 'ß' u. dgl. Sind das keine Buchstaben?

      Die habe ich mit zu den Sonderzeichen gezählt.

      Vielen Dank erstmal für die Links. Ich werde mich jetzt nochmal intensiv in das Thema einlesen. Irgendwie habe ich das noch nicht so richtig verstanden wie Reguläre Expressions grundlegend funktionieren.

      Sollte ich nicht weiterkommen melde ich mich wieder.

      Danke.

    2. gudn tach!

      1. String darf aus Zahlen und Buchstaben bestehen!

      Mit „Zahlen“ meint du sicher Ziffern.

      ziffern werden durchaus auch als zahlen angesehen. aber da ohnehin jede zahl eine ziffer bedingt, ist deine bemerkung eigentlich ueberfluessig. ;-p

      Und mit Buchstaben anscheinend 'A' bis 'Z' und 'a' bis 'z', nicht jedoch 'Ä', 'é', 'ß' u. dgl. Sind das keine Buchstaben?

      ja, die sind dafuer imho zu haesslich. (ok, ok, bevor's irgendjemand missversteht: nur spass; sind auch buchstaben.)

      Dann sollte es dir gelingen, folgendes aufzuschreiben: Stringanfang gefolgt von beliebig vielen Buchstaben und Ziffern gefolgt von einem Buchstaben gefolgt von beliebig vielen Buchstaben und Ziffern gefolgt von Stringende.

      halte ich auch fuer die beste idee; also auch besser als mehrere abfragen hintereinander. da aber \w haeufig missverstanden wird, bin ich so frei, das mal als regexp zu formulieren (was dich, Frank, aber in keiner weise davon abhalten soll, dir die manuals mal genauer anzuschauen; entweder im perl-kapitel von selfhtml oder im php-handbuch selbst).
        /[1]*[a-zA-Z][a-zA-Z0-9]*\z/

      die eleganter anmutende schreibweise
        /^\w*[a-zA-Z]\w*\z/
      koennte in die hose gehen, das \w locale-abhaengig ist, also u.u. auch umlaute/eszett erfasst.

      prost
      seth


      1. a-zA-Z0-9 ↩︎

        1. String darf aus Zahlen und Buchstaben bestehen!

        Mit „Zahlen“ meint du sicher Ziffern.

        ziffern werden durchaus auch als zahlen angesehen. aber da ohnehin jede zahl eine ziffer bedingt, ist deine bemerkung eigentlich ueberfluessig. ;-p

        ist sie nicht, frei nach bibi blocksberg: hex - hex!

        123456 ist eine zahl
        1 ist eine ziffer
        ABCDEF ist ein zahl
        A ist eine ziffer
        A1 ist eine zahl

        die frage ist immer, welches zahlensystem verwendet man

        in einem oktalen zahlensystem sind 8 und 9 keine ziffern sondern "irgendwelche sonderzeichen"

        1. gudn tach!

          Mit „Zahlen“ meint du sicher Ziffern.

          ziffern werden durchaus auch als zahlen angesehen. aber da ohnehin jede zahl eine ziffer bedingt, ist deine bemerkung eigentlich ueberfluessig. ;-p

          ist sie nicht

          doch...

          , frei nach bibi blocksberg: hex - hex!

          123456 ist eine zahl
          1 ist eine ziffer

          1 ist auch eine zahl

          ABCDEF ist ein zahl
          A ist eine ziffer
          A1 ist eine zahl

          A ist auch eine zahl (im hex-system).

          die frage ist immer, welches zahlensystem verwendet man

          nein, innerhalb eines zahlensystems sind einstellige zahlen immer ziffern (und umgekehrt).

          in einem oktalen zahlensystem sind 8 und 9 keine ziffern sondern "irgendwelche sonderzeichen"

          dort sind sie aber auch keine zahlen...

          prost
          seth

    3. (Hallo( und Guten Morgen)|Hi(ho)|Tag|Mahzeit) Gunnar Bittersmann,

      Mit „Zahlen“ meint du sicher Ziffern. Und mit Buchstaben anscheinend 'A' bis 'Z' und 'a' bis 'z', nicht jedoch 'Ä', 'é', 'ß' u. dgl. Sind das keine Buchstaben?

      <picking what="nits">Wenn wir schon beim Korinthenkacken (Zahlen vs. Ziffern) sind: Historisch betrachtet sind die deutschen Umlaute und das "Ess-Zett" keine (einzelnen) Buchstaben sondern Ligaturen …</picking>

      Wie es sich mit dem "é" und seinen Verwandten verhält, hab ich jetzt aus reiner Faulheit nicht recherchiert … ;-)

      … und um gerade noch so die Kurve zu einem halbwegs hilfreichen Posting zu bekommen: Die PCRE-Library bietet zum Zwecke des Auffindens aller (in ihren internen Unicode-Tabellen definierten[1]) Buchstaben die Zeichenklasse \p{L} an. Weiterführende Erklärungen hierzu findet man (beispielsweise) im PHP-Handbuch auf der Seite http://www.php.net/manual/de/regexp.reference.php#regexp.reference.unicode.

      [1] Für den Fall, dass es (Buchstaben|Lettern|Glyphen|…) gibt, die nicht dort erfasst sind … ;-)

      MffG
      EisFuX