Problem mit preg_match()->a-z und bestimmte UNICODE-Zeichen

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

  • Problem mit preg_match()->a-z und bestimmte UNICODE-Zeichen

    Hallo, ich gebe zu ich habe Reguläre Ausdrücke nicht wirklich verstanden. Ich habe es mehrere male durchgelesen und die wirklich einfachen Beispiele verstanden (PLZ überprüfen)!

    Nun habe ich mir das Pattern hier zusammengebastelt:

    $pattern = "/^([a-z]+)?$/i";


    Es soll mir ein Textfeld überprüfen ob da auch wirklich nur Buchstaben vorkommen.

    Ich benötige aber noch 2 Sachen dazu:

    1. Ob das Feld leer ist (darf nicht sein)

    und

    2. 5 Sonderzeichen (UNICODE) dürfen vorhanden sein (š đ č ć ž)


    Ich weis hier wird geholfen es zu verstehen und keine Lösungen präsentiert.
    Ich hoffe dennoch dass jemand hier mitleid mit mir hat.....entweder erklären das ich es auch wirklich verstehe oder eben das Pattern zu liefern welches die zusätzlichen Zeichen berücksichtigt!

    Ich danke euch schonmal im vorraus!

  • #2
    Re: Problem mit preg_match()->a-z und bestimmte UNICODE-Zeichen

    1. Ob das Feld leer ist (darf nicht sein)
    das gibt dein pattern doch schon an.
    2. 5 Sonderzeichen (UNICODE) dürfen vorhanden sein (š đ č ć ž)
    entweder gibst du jedes zeichen an, welches vorkommen darf (eventuell mit modifier u), oder du schließt die zeichen aus, die nicht vorkommen dürfen. beides nicht gerade elegant.
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Blos wie gebe ich diese Zeichen an die Vorkommen dürfen mit diesem Modifier /u ??

      Hänge ich gan ans Ende einfach ein /u an mit diesen UNICODE-Zeichen nach der Eckigen Klammer ?


      Wenn ich das so mache:

      $pattern = "/^([a-z]ccžšd+)?$/iu";

      Dann kommt das:

      Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 9 in

      Kommentar


      • #4
        ereg und UNICODE vertragen sich demnach nicht, oder ?

        Weis keiner Rat ? Ich bin am verzweifeln.....

        Kommentar


        • #5
          bei mir funktionierts, auch ohne u ... zeig mal deinen code.

          du solltest die zeichen außerdem in die zeichenklasse hineinschreiben.
          Die Zeit hat ihre Kinder längst gefressen

          Kommentar


          • #6
            Der Code ist folgender:

            $pattern = "/^([a-z]žš+)?$/iu";


            Da fehlt noch ein đ,ć,č, der kann mein UE32 irgenwie nicht....

            Aber mach ich dann in in einem anderen Editor, das ist kein Problem, das Problem ist wie gesagt das ich diese fehlermeldung bekomme...

            Kommentar


            • #7
              Original geschrieben von Master0Blicker
              Da fehlt noch ein đ,ć,č, der kann mein UE32 irgenwie nicht....

              Aber mach ich dann in in einem anderen Editor, das ist kein Problem, das Problem ist wie gesagt das ich diese fehlermeldung bekomme...
              die fehlermeldung bekommst du, weil PHP noch nicht wirklich unicode-kompatibel ist.

              macht aber nichts, da sich UTF-8 ja auch komplett als ASCII darstellen lässt.

              gebe dein pattern noch mal so, wie's oben war -
              $pattern = "/^([a-z]ccžšd+)?$/iu";
              - in UE ein, und dann wählst du über datei -> konvertieren "Unicode/ASCII/UTF8 nach UTF8 (ASCII-Bearbeitung)" aus.

              dann kommt da
              PHP-Code:
              $pattern "/^([a-z]ccžšd+)?$/iu"
              heraus, und damit speicherst du das script mal ab.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Also, ich habe nun folgendes:

                $pattern = "/^([a-z]d»zÄTćA»A¶Ä‘+)?$/iu";

                Und dennoch bekomme ich diese Fehlermeldung:

                Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 8 in


                Ich habe das so gemacht gehabt wie du es sagtest @wahsaga.

                Jedoch will mein UE ja auch diese Zeichen nicht akzeptieren: ć č đ und bringt mir stattdessen komische Zeichen. Diese aber hier reinkopiert sind plötzlich wieder meine richtigen Zeichen.
                Also kann sie UE nur nicht anzeigen, den Code hat es aber richtig....

                Und danach habe ich folgendes Probiert da du ja sagtest das PHP nicht wirklich Unicode-Kompatibel ist und da ich es ja jetzt sowieso in ASCII gewandelt habe:

                $pattern = "/^([a-z]d»zÄTćA»A¶Ä‘+)?$/i";

                also habe ich das /u weggelassen. Zumindest bekomme ich keine Fehlermeldung mehr. Jedoch wird jetzt jedesmal ein False zurückgeliefert von dieser Funktion.......


                Hier nochmal mein Code:

                Code:
                 
                $text = "abcčdsćrešdsđsdžds"; 
                	$pattern = "/^([a-z]d»zÄTćA»A¶Ä‘+)?$/i";
                	if(preg_match ($pattern,$text))...

                Kommentar


                • #9
                  nun wenn ich das Pattern richtig lese
                  PHP-Code:
                  $pattern "/^([a-z]ccžšd+)?$/iu"
                  wird dabei nach Zeilen/Eingaben gesucht die :

                  - als erstes Zeichen einen Buchstaben von A-Z
                  - danach die Zeichenkette ccžš
                  - danach ein oder mehr d

                  - und die drei vorigen Punkte keinmal oder einmal vorkommen

                  und ich bezweifel, dass du das willst, sondern eher etwas wie
                  PHP-Code:
                  $pattern "/^([a-zccžšd]){1,}$/iu"
                  womit nach scheinbar tschechischen Wörtern gesucht wird (keine Leerzeichen erlaubt sind)

                  UTF-8 / Unicode hin oder her

                  Zuletzt geändert von chansel0049; 05.07.2005, 10:10.
                  chansel0049
                  ----------------------------------------------------
                  if you've reached the bottomline - dig further!
                  Übersetzer gesucht? http://www.babelport.com

                  Kommentar


                  • #10
                    Original geschrieben von Master0Blicker
                    Hier nochmal mein Code:
                    Code:
                     
                    $text = "abcčdsćrešdsđsdžds"; 
                    	$pattern = "/^([a-z]d»zÄTćA»A¶Ä‘+)?$/i";
                    	if(preg_match ($pattern,$text))...
                    der passt ja nun auch nicht wirklich zu deinem pattern ...

                    wenn du die zeichen im regex als ASCII schreibst - dann solltest du das wohl auch im zu durchsuchenden text machen.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      @Chansel

                      Dieses Pattern bring auch eine Fehlermedung (Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 8 in D:\Apache\Apache2\htdocs\insertfunc.inc on line 43
                      )

                      $pattern = "/^([a-zccžšd]){1,}$/iu";

                      Er will einfach meine UNICODE-Zeichen nicht.....(ahja, es handelt sich um kroatische bzw. serbokroatische Zeichen nur so mal nebenbei erwähnt)


                      @wahsaga

                      Ja, aber du hast ja gesagt das ich mein Pattern nach ASCII-umwandeln lassen soll im UE und dies dann als Pattern verwenden soll....oder habe ich das mal wieder was nicht verstanden gehabt ?

                      Oder ist das schon so richtig nur das ich mein Text vor der Prüfung auch irgendwie 'umwandeln' sollte ? Falls ja, wie ? Ich habe da irgendwo UTF-decoding oder sowas ähnliches gesehen, meinst du das ?

                      Kommentar


                      • #12
                        Nun was das UTF-8/Unicode Problem angeht rate ich, den vorgeschlagenen Konvertierungsansatz zu gehen ..


                        Ich wollte nur darauf hinweisen, dass dein Pattern mit absoluter Wahrscheinlichkeit ( ) falsch ist

                        Allerdings könnten Backslash auch hilfreich sein, löst bei mir so manche Probleme ...

                        a-z\ä\ö\ß
                        ...
                        chansel0049
                        ----------------------------------------------------
                        if you've reached the bottomline - dig further!
                        Übersetzer gesucht? http://www.babelport.com

                        Kommentar


                        • #13
                          Wie bereits erwähnt bringt mir das

                          Code:
                           
                          $pattern = "/^([a-zd»zÄTćA»A¶Ä‘+])?$/i";
                          return(preg_match ($pattern,$text));
                          immer false zurück, egal ob der Text nun richtig oder falsch ist in....

                          Ich habe ja von @wahsaga diesen Ansatz bekommen und befolgt.
                          Aber irgendwas stimmt da noch nicht....

                          Ich 'hänge' an diesem Problem nun seid 2 Tagen......und in Google finde ich auch nichts brauchbares, entweder abstrakte 'Her-Um-Weiterleitungen oder eben gar nichts zu diesem Thema...scheint nicht besonders populär zu sein....

                          Kommentar


                          • #14
                            Also, ich habe nun meinen zu durchsuchenden Text mit utf8_decode bzw. utf8_encode 'bearbeitet....gleiches Ergebnis.
                            Die Funktion preg_match liefert immer false zurück, egal ob ich richtige oder falsche Inahlte habe!

                            Code:
                                            $pattern = "/^([a-zd»zÄTćA»A¶Ä‘+])?$/i";
                            	$text = utf8_decode($text);
                            	return(preg_match ($pattern,$text));
                            bzw.

                            Code:
                                            $pattern = "/^([a-zd»zÄTćA»A¶Ä‘+])?$/i";
                            	$text = utf8_encode($text);
                            	return(preg_match ($pattern,$text));
                            So langsam überlege ich mir das so zu machen das ich auf die Überprüfung verzichte und einfach noch ein Text hinzuschreibe das es äusserst wichtig sei das der Inhalt stimmen muss....
                            Was anderes fällt mir dazu nicht mehr ein...

                            Kommentar


                            • #15
                              Kann mir denn keiner Helfen bzw. sagen wo ich dazu hilfe finde ??

                              Kommentar

                              Lädt...
                              X