[REGEX] umlaute erlauben, POSIX

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [REGEX] umlaute erlauben, POSIX

    hallo comm,

    ich komme grad echt nicht weiter. ich habe folgendes preg_match:

    PHP-Code:
    if(preg_match("#[^\\wäüöÄÖÜß\\- ]#i"$_POST['nachname'])){ ... } 
    damit überprüfe ich eine formulareingabe. ich möchte nur buchstaben, umlaute, -, ß und leertaste erlauben. wenn ich das richtig gemacht habe müsste mir das pattern ja ein vorkommen jedes anderen zeichens finden, richtig?

    mein problem sind die umlaute. die werden von dem pattern auch "gefunden".

    ich habe schon einige sachen ausprobiert, u.a. das ganze mit POSIX, also mit [[:alpha:]] zu überprüfen. trotz setlocale(LC_ALL, "de_DE") klappt es auch damit nicht. laut PHPinfo ist POSIX bei mir aber enabled.

    ich bin etwas ratlos. hatte vielleicht jemand schonmal ähnliche probleme?

    gute nacht! und danke schonmal!

    gruß, markus
    Postkarten

  • #2
    \w = any letter or digit or the underscore character

    Die Umlaute etc. stecken da also schon mit drin.

    Kommentar


    • #3
      hm .. ich dachte \w ist eine zeichenklasse für - wie du schreibst - zeichen, ziffern und den unterstrich, aber exklusive ß und umlauten. ich finde da zum beispiel diese quelle.

      kann es sein, dass es auf die PHP version ankommt, ob das mit umlauten im Regex funktioniert?
      Postkarten

      Kommentar


      • #4
        Nein, es kommt aufs Locale an und das setzt du ja auf de_DE.
        Ich habe auch eine Quelle: http://php.net/manual/en/function.preg-match.php#49926
        Sie bezieht sich zwar auf [:alpha:], aber bestimmt trifft das auch auf \w zu.

        Übrigens ist vermutlich dein Editor schuld. Der speichert dein Script bestimmt und UTF-8 und dann soll mit ISO-8859 gematcht werden. Aber das ist wie gesagt alles egal, wenn du die Umlaute gar nicht mehr explizit angibst sondern mit setlocale() und \w arbeitest.
        Zuletzt geändert von onemorenerd; 17.12.2007, 10:07.

        Kommentar


        • #5
          ein test zu [:alpha:]

          du hast recht, [:alpha:] berücksichtigt die umlaute und das ß, \w jedoch nicht. ich habe meinen fehler zwar gefunden, aber dennoch möchte ich gerne mal wissen was es mit diesem POSIX [:alpha:] ding auf sich hat.

          mein fehler war, dass die kodierung des dokuments in dreamweaver auf westeuropäisch stand und nicht auf UTF-8. damit sollte man wenn man es einmal anfängt ja durchgängig arbeiten. jetzt klappt das ganze, wenn ich die umlaute im REGEX stehen habe.

          teste mal folgendes script:

          PHP-Code:
          <? 
          header("Content-type: text/html; charset=utf-8");
          setlocale(LC_ALL, 'de_DE');

          $var = "ÄÖÜäöüMarkuasdasdÄÖÜüüö";

          if(preg_match("#[^\\w]#i", $var)){
              echo "Umlaute in ".$var." gefunden!";
          } else { echo "Keine Umlaute in ".$var." gefunden!"; }

          echo "<br />";

          if(preg_match("#[^[:alpha:]]#", $var)){
              echo "Umlaute in ".$var." gefunden!";
          } else { echo "Keine Umlaute in ".$var." gefunden!"; }
          ?>
          ich bekomme beides mal als ausgabe, dass umlaute gefunden wurden, obwohl das zweite pattern ja eigentlich nicht matchen dürfte, da in alpha ja angeblich umlaute berücksichtigt werden.
          Zuletzt geändert von scraddy; 17.12.2007, 10:19.
          Postkarten

          Kommentar


          • #6
            Re: ein test zu [:alpha:]

            Sorry, ich bin grad auf'm Sprung. Vielleicht teste ich es heute abend mal, wenn ich zurück bin.

            Folgendes will ich aber noch schnell loswerden: \w und :alpha: sind IMHO identisch bzgl. der Umlaute - sowohl vor, als auch nach setlocale(LC_ALL, 'de_DE').

            Kommentar


            • #7
              ok, also vielleicht irre ich mich ja auch, aber ich bin momentan noch von meiner meinung überzeugt. ich würde mich freuen, wenn du es nachher oder in den nächsten tagen mal testen würdest oder mir ein beispiel gibst, was deine vermutung beweist.

              das würde ich wirklich gerne geklärt haben, auch wenn es nichts mehr mit meinem problem zu tun hat, aber das ist ja vielleicht auch für andere interessant.
              Postkarten

              Kommentar


              • #8
                Hier kannst du die ansehen, was \w bzw. :alpha: alles matcht - bei mir sind das auch die Umlaute.
                PHP-Code:
                <?php
                header
                ("Content-type: text/plain;");
                setlocale(LC_ALL'de_DE');

                $var "ÄÖÜäöüMarkuasdasdÄÖÜüüö";

                preg_match_all("#[\w]#i"$var$matches);
                print_r($matches);

                preg_match_all("#[[:alpha:]]#"$var$matches);
                print_r($matches);

                ?>

                Kommentar


                • #9
                  ok, das ist seltsam. du bekommst also ein array, wo auch die umlaute als einträge drin stehen? ich erhalte beide male dieses array:
                  PHP-Code:
                  Array
                  (
                      [
                  0] => Array
                          (
                              [
                  0] => M
                              
                  [1] => a
                              
                  [2] => r
                              
                  [3] => k
                              
                  [4] => u
                              
                  [5] => a
                              
                  [6] => s
                              
                  [7] => d
                              
                  [8] => a
                              
                  [9] => s
                              
                  [10] => d
                          
                  )


                  liegt's am webspace?! unterschiedliche php konfiguration?
                  Postkarten

                  Kommentar


                  • #10
                    Ja, bei mir stehen auch die Umlaute im Array.
                    Was gibt setlocale() zurück? Was gibt "locale -a" auf der Konsole aus?

                    Kommentar

                    Lädt...
                    X