Melvin Cowznofski: Suche regulären Ausdruck

Hallo,

wie immer, wenn ich mich mit regulären Ausdrücken beschäftige, komme ich leider zu keiner Lösung. Eine Formulareingabe soll mittels preg_match() auf ihre Gültigkeit überprüft werden. In diesem Fall bedeutet gültig:

* Die Eingabe darf nur aus Klein- und Großbuchstaben incl. Ä, ä, Ö, ö, Ü, ü und ß bestehen.
* Die Eingabe muss aus _mindestens_ 3 dieser Zeichen bestehen.
* Wenn die Eingabe mehr als diese 3 Zeichen hat, _dann_ darf auch ein Leerzeichen vorkommen. Aber nur nach den ersten 3 Zeichen.

Meine bisherige Lösung ist:

~[1]{3,}([A-Za-zÄäÖöÜüß]|\s)?$~

Das bedeutet für mich: Am Anfang mindestens 3 Zeichen ohne Leerzeichen, gefolgt von Zeichen und/oder Leerzeichen in keiner oder beliebiger Anzahl. Das ist aber offenbar falsch, weil zB. "Blaaa Blo" nicht gefunden wird.

Kann mir bitte wer weiterhelfen und mir sagen, wo mein Denkfehler liegt bzw. wie ich den reulären Ausdruck umschreiben muss?

Und meine Zusatzfrage: Könnte man den Ausdruck auch so erweitern, dass auch die letzten 3 Zeichen der Eingabe nur aus den Buchstaben bestehen darf? Also Leerzeichen nur, wenn die Eingabe mit mindestens 3 Buchstaben beginnt und mit mindestens 3 Buchstaben aufhört. Ginge das?

Mit lieben Grüßen

Melvin Cowznofski

--

Melvin Cowznofski
What – me worry?

  1. A-Za-zÄäÖöÜüß ↩︎

  1. wie immer, wenn ich mich mit regulären Ausdrücken beschäftige, komme ich leider zu keiner Lösung. Eine Formulareingabe soll mittels preg_match() auf ihre Gültigkeit überprüft werden. In diesem Fall bedeutet gültig:

    * Die Eingabe darf nur aus Klein- und Großbuchstaben incl. Ä, ä, Ö, ö, Ü, ü und ß bestehen.
    * Die Eingabe muss aus _mindestens_ 3 dieser Zeichen bestehen.
    * Wenn die Eingabe mehr als diese 3 Zeichen hat, _dann_ darf auch ein Leerzeichen vorkommen. Aber nur nach den ersten 3 Zeichen.

    Darf ich vorweg fragen: "warum?"

    Meine bisherige Lösung ist:

    ~[1]{3,}([A-Za-zÄäÖöÜüß]|\s)?$~

    Das bedeutet für mich: Am Anfang mindestens 3 Zeichen ohne Leerzeichen, gefolgt von Zeichen und/oder Leerzeichen in keiner oder beliebiger Anzahl. Das ist aber offenbar falsch, weil zB. "Blaaa Blo" nicht gefunden wird.

    ^ Zeichenkettenanfang
    Gefolgt von mindestens 3 Zeichen der Form [A-Za-zÄäÖöÜüß]
    Optional gefolgt von
    einem Zeichen der Form [A-Za-zÄäÖöÜüß] oder einem Whitespace-Zeichen
    $ Zeichenkettenende

    Du willst aber:
    Zeichenketten Anfang
    Exakt 3 Zeichen
    Gefolgt von beliebig vielen oder keinen Zeichen der gegebenen Form
    oder
    gefolgt von _genau einem Leerzeichen_ (nicht Whitespacezeichen allgemein) welches von beliebigen Zeichen deine Form gefolgt wird (1 mal oder mehrfach)
    Zeichenkettenende

    Und meine Zusatzfrage: Könnte man den Ausdruck auch so erweitern, dass auch die letzten 3 Zeichen der Eingabe nur aus den Buchstaben bestehen darf? Also Leerzeichen nur, wenn die Eingabe mit mindestens 3 Buchstaben beginnt und mit mindestens 3 Buchstaben aufhört. Ginge das?

    Ja sicher geht das.


    1. A-Za-zÄäÖöÜüß ↩︎

    1. Hallo suit!

      Und meine Zusatzfrage: Könnte man den Ausdruck auch so erweitern, dass auch die letzten 3 Zeichen der Eingabe nur aus den Buchstaben bestehen darf? Also Leerzeichen nur, wenn die Eingabe mit mindestens 3 Buchstaben beginnt und mit mindestens 3 Buchstaben aufhört. Ginge das?

      Ja sicher geht das.

      Wenn Du siehst, dass ich schon  mit dem simpleren Teil nicht weiterkomme, wie soll mir dann für den komplexeren Teil ein "Ja sicher geht das" eine hilfreiche Antwort sein?

      Mit lieben Grüßen

      Melvin Cowznofski

      --

      Melvin Cowznofski
      What – me worry?
      1. Ja sicher geht das.

        Wenn Du siehst, dass ich schon  mit dem simpleren Teil nicht weiterkomme, wie soll mir dann für den komplexeren Teil ein "Ja sicher geht das" eine hilfreiche Antwort sein?

        Deine Frage war _ob_ das geht - meine Antwort ist hier völlig OK.

        Mir ist klar, dass du mit dem "simpleren Teil" nicht weiterkommst - wenn ich dir jetzt unreflektiert eine Lösung gebe, kopierst du sie, verstehst sie nicht und lernst nix daraus - dafür ist mir meine Zeit zu schade.

        Ich mache nicht anderer Leute Arbeit in meine Freizeit - wenn, dann helfe ich andern Leuten sich zu verbessern ;)

        1. Hallo suit!

          Ich mache nicht anderer Leute Arbeit in meine Freizeit

          Sowas wurde auch nie verlangt. Aber im Gegensatz zu einem "Ja sicher geht das" wäre zB. der Verweis auf eine Seite, wo das näher erläutert wird hilfreicher und konstruktiver. Wenn ich am Bahnhof beim Fahrkartenschalter frage, ob es eine Möglichkeit gibt, zu einem bestimmten Ort zu kommen, erwarte ich mir auch einen Fahrplanvorschlag und kein "Ja, gibt es" und das war's.

          <insider>
            Ich mag zwar vom Südtirolerplatz aus weiter weg sein als Du zu den genialen
            scharfen Hotdogs beim Volksopernwürstelstand, aber das gibt Dir trotzdem kein
            Recht auf so eine hingeworfene Antwort! ;)
          </insider>

          Mit lieben Grüßen

          Melvin Cowznofski

          --

          Melvin Cowznofski
          What – me worry?
          1. Ich mache nicht anderer Leute Arbeit in meine Freizeit

            Sowas wurde auch nie verlangt. Aber im Gegensatz zu einem "Ja sicher geht das" wäre zB. der Verweis auf eine Seite, wo das näher erläutert wird hilfreicher und konstruktiver.

            Zu diesem Zeitpunkt war die Aufgabenstellung noch nicht entsprechend definiert - und ich bin mir sicher, einen Link zu einer der vielen PCRE-Dokumentationen hast du selbst gefunden.

            Hätte ich dir jetzt einfach Assertions empfohlen, hätte dich das möglicherweise auf eine falsche Fährte geführt. Wäre nicht nett gewesen ;)

            1. @@suit:

              nuqneH

              Hätte ich dir jetzt einfach Assertions empfohlen, hätte dich das möglicherweise auf eine falsche Fährte geführt.

              Eben. Es war ja ein *regulärer* Ausdruck gesucht.

              Qapla'

              --
              „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  2. Moin,

    Kann mir bitte wer weiterhelfen und mir sagen, wo mein Denkfehler liegt bzw. wie ich den reulären Ausdruck umschreiben muss?

    Und meine Zusatzfrage: Könnte man den Ausdruck auch so erweitern, dass auch die letzten 3 Zeichen der Eingabe nur aus den Buchstaben bestehen darf? Also Leerzeichen nur, wenn die Eingabe mit mindestens 3 Buchstaben beginnt und mit mindestens 3 Buchstaben aufhört. Ginge das?

    ^[A-Za-zÄäÜüÖöß]{3,}[A-Za-zÄäÜüÖöß\s]*[A-Za-zÄäÜüÖöß]{3}$

    Dieser Regex-String funktioniert bei mir in der Form, wie du es willst. Vielleicht könnten aber Regex-Profis den auch noch etwas optimieren.
    Hinweis: Ich nehme zum Erstellen von regulären Ausdrücken sehr gerne EditPad Lite 7. Dort kann man auch Live testen, was gefunden wird oder nicht. Es gibt natürlich auch online jede Menge RegEx-Interpreter.

    Grüße Marco

    --
    Ich spreche Spaghetticode - fließend.
    1. Hallo Marco!

      ^[A-Za-zÄäÜüÖöß]{3,}[A-Za-zÄäÜüÖöß\s]*[A-Za-zÄäÜüÖöß]{3}$

      Dieser Regex-String funktioniert bei mir in der Form, wie du es willst. Vielleicht könnten aber Regex-Profis den auch noch etwas optimieren.

      Danke für dien Vorschlag, er funktioniert aber nur in den ersten beiden der 3 Teile. Der Schluss stimmt nicht, denn Dein Ausdruck sagt, dass genau 3 Buchstaben die Eingabe beenden müssen. Somit muss bei Deinem Ausdruck die Eingabe aus mindestens 6 Zeichen bestehen. Und ich will ja schon 3 Zeichen als Treffer haben.

      Also was ich meinte: Leerzeichen sind erlaubt, wenn 3 Buchstaben den Anfang und 3 Buchstaben das Ende bilden, die Eingabe selbst muss aus mindestens 3 Zeichen bestehen. Also erlaubt sein sollte zB. 'Udo', 'Berlin', 'Öde von'. Nicht erlaubt sein sollte 'Ab heute', 'Von heute an', 'da'.

      Also leider noch keine Lösung. =/

      Mit lieben Grüßen

      Melvin Cowznofski

      --

      Melvin Cowznofski
      What – me worry?
      1. @@Melvin Cowznofski:

        nuqneH

        Also was ich meinte: Leerzeichen sind erlaubt, wenn 3 Buchstaben den Anfang und 3 Buchstaben das Ende bilden, die Eingabe selbst muss aus mindestens 3 Zeichen bestehen.

        Wieviele Leerzeichen sind erlaubt? Soll "foo bar baz" (jeweils 3 Zeicehn am Anfang und am Ende) gültig sein?

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
        1. Hallo Gunnar!

          Wieviele Leerzeichen sind erlaubt? Soll "foo bar baz" (jeweils 3 Zeicehn am Anfang und am Ende) gültig sein?

          Prinzipiell sind beliebig viele Leerzeichen erlaubt. Es ist also egal, ob keines, eines oder mehrere vorkommen. Wichtig ist, dass an den ersten 3 und an den letzten 3 Stellen kein Leerzeichen vorkommen darf und es insgesamt mindestens 3 Zeichen sein müssen.

          Also erlaubt: 'foo bar baz', 'foobar baz', 'foo b a r baz'.
          Also nicht erlaubt: 'fo bar baz', 'foo bar ba', ' foo bar baz '.

          Fällt Dir vielleicht eine REGEX-Lösung ein?

          Mit lieben Grüßen

          Melvin Cowznofski

          --

          Melvin Cowznofski
          What – me worry?
          1. @@Melvin Cowznofski:

            nuqneH

            Prinzipiell sind beliebig viele Leerzeichen erlaubt.

            Also auch mehrere hintereinander?

            Es ist also egal, ob keines, eines oder mehrere vorkommen. Wichtig ist, dass an den ersten 3 und an den letzten 3 Stellen kein Leerzeichen vorkommen darf und es insgesamt mindestens 3 Zeichen sein müssen.

            Also 3 Buchstabenzeichen, die keine Leerzeichen sind, optional gefolgt von beliebig vielen Buchstabenzeichenoder Leerzeichen und weiteren 3 Zeichen, die keine Leerzeichen sind.

            Das kann man genauso aufschreiben: ^[:alpha:]{3,}(?:[:alpha::space:]*[:alpha:]{3,})$

            (Erlaubt auch andere Whitespace-Zeichen außer U+0020.)

            Oder wenn du auf deiner seltsamen Beschränkung bestehst: ^[A-Za-zÄÖÜäöüß]{3,}(?:[A-Za-zÄÖÜäöüß ]*[A-Za-zÄÖÜäöüß]{3,})$

            Wenn nicht mehrere Leerzeichen hintereinander erlaubt sind, müsste man etwas mehr Gehirnschmalz reinstecken. Aber nur etwas.

            Qapla'

            --
            „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
            1. Hallo Gunnar!

              Danke für die Arbeit!

              Das kann man genauso aufschreiben: ^[:alpha:]{3,}(?:[:alpha::space:]*[:alpha:]{3,})$

              _Das_ schaut echt gut aus jetzt! Muss gestehen, dass ich :alpha: und :space: überhaupt noch nie wo gesehen oder gelesen habe in diesem Zusammenhang. Deshalb ein großes Danke für diesen Hinweis. Schön, wieder was gelernt zu haben. Auf dieser Seite ist das nochmals schön erklärt und zusammengefasst.

              Können wir den Ausdruck bitte Stück für Stück durchgehen? Mir ist es nämlich noch nicht _ganz_ klar, was da passiert. Also das [:alpha:]{3,} sagt "ein alpha/Buchstaben-Zeichen, egal ob groß oder klein, mindestens 3 Mal hintereinander". Dann folgt ein Block in runden Klammern. Das heißt also: Nach diesen mindestens 3 alpha/Buchstaben-Zeichen kommt das, was in den runden Klammern steht. Und hier kommt jetzt das, was ich nicht so richtig verstehe.

              Was genau bewirken bei dem ?:[:alpha::space:]*[:alpha:]{3,} die ersten 2 Zeichen, also das Fragezeichen und der Doppelpunkt? Kannst Du das bitte irgendwie verständlich ausdeutschen?

              Wenn nicht mehrere Leerzeichen hintereinander erlaubt sind, müsste man etwas mehr Gehirnschmalz reinstecken. Aber nur etwas.

              Das brauche ich nicht zwingend, sprich - es sind auch mehr Leerzeichen erlaubt. Wobei mich natürlich auch interessieren würde, wie Du _das_ nun lösen würdest.

              Mit lieben Grüßen

              Melvin Cowznofski

              --

              Melvin Cowznofski
              What – me worry?
              1. Om nah hoo pez nyeetz, Melvin Cowznofski!

                Was genau bewirken bei dem ?:[:alpha::space:]*[:alpha:]{3,} die ersten 2 Zeichen, also das Fragezeichen und der Doppelpunkt? Kannst Du das bitte irgendwie verständlich ausdeutschen?

                m1476412

                Matthias

                --
                Der Unterschied zwischen Java und JavaScript ist größer als der zwischen digital und Digitalis.

                1. Hallo Mathias!

                  Was genau bewirken bei dem ?:[:alpha::space:]*[:alpha:]{3,} die ersten 2 Zeichen, also das Fragezeichen und der Doppelpunkt? Kannst Du das bitte irgendwie verständlich ausdeutschen?
                  m1476412

                  Das "durch ein Vorangestelltes ?: wird der Inhalt der Klammer nicht in das Ergebnis aufgenommen" _habe_ ich gelesen, aber so richtig verstehe ich jetzt noch immer nicht, wie das gemeint ist.

                  Mit lieben Grüßen

                  Melvin Cowznofski

                  --

                  Melvin Cowznofski
                  What – me worry?
                  1. @@Melvin Cowznofski:

                    nuqneH

                    Das "durch ein Vorangestelltes ?: wird der Inhalt der Klammer nicht in das Ergebnis aufgenommen" _habe_ ich gelesen, aber so richtig verstehe ich jetzt noch immer nicht, wie das gemeint ist.

                    Wird es durch diese Tabelle klarer?

                    console.log(/b(cd)+/g.exec("abcdcde"));    // ["bcdcd", "cd"]  
                      
                    console.log(/b(?:cd)+/g.exec("abcdcde"));  // ["bcdcd"]
                    

                    Qapla'

                    --
                    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
              2. @@Melvin Cowznofski:

                nuqneH

                Das kann man genauso aufschreiben: ^[:alpha:]{3,}(?:[:alpha::space:]*[:alpha:]{3,})$

                _Das_ schaut echt gut aus jetzt! Muss gestehen, dass ich :alpha: und :space: überhaupt noch nie wo gesehen oder gelesen habe in diesem Zusammenhang.

                Diese Zeichenklassen gibt es auch nicht in allen Inplementierungen.

                Wenn nicht mehrere Leerzeichen hintereinander erlaubt sind, müsste man etwas mehr Gehirnschmalz reinstecken. Aber nur etwas.

                Das brauche ich nicht zwingend, sprich - es sind auch mehr Leerzeichen erlaubt. Wobei mich natürlich auch interessieren würde, wie Du _das_ nun lösen würdest.

                Dann muss nach einem Leerzeichen also ein Buchstabe kommen. Es gibt also Gruppen von [:space:][:alpha:]+, und zwar beliebig viele, also * dahinter. Da der * für die Gruppe gelten soll: klammern:

                (?:[:space:][:alpha:]+)*

                Em Ende muss ein Leerzeichen gefolgt von mindestens 3 Buchstaben stehen:

                (?:[:space:][:alpha:]+)*[:space:][:alpha:]{3,}$

                Das Ganze ist aber optional, also ? dahinter. Da das ? für die Gruppe gelten soll: nochmal klammern:

                (?:(?:[:space:][:alpha:]+)*[:space:][:alpha:]{3,})?$

                Davor stehen am Anfang noch die obligatorischen mindestens 3 Buchstaben:

                ^[:alpha:]{3,}(?:(?:[:space:][:alpha:]+)*[:space:][:alpha:]{3,})?$

                Qapla'

                --
                „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
        2. Also was ich meinte: Leerzeichen sind erlaubt, wenn 3 Buchstaben den Anfang und 3 Buchstaben das Ende bilden, die Eingabe selbst muss aus mindestens 3 Zeichen bestehen.

          Wieviele Leerzeichen sind erlaubt? Soll "foo bar baz" (jeweils 3 Zeicehn am Anfang und am Ende) gültig sein?

          Was mir immer noch fehlt ist eine Antwort auf den Hinweis, dass \s keine Leerzeichen sind sondern Whitespace-Zeichen im Allgemeinen - das ist auch eine gänzlich andere Anforderung.

          Je nach PCRE-Implementierung sind Tabs, geschützte Leerzeichen, dünne Leerzeichen usw. ein Whitespace-Zeichen - Umbrüche (CR/LF) selbstverständlich auch.

      2. Moin,

        Also was ich meinte: Leerzeichen sind erlaubt, wenn 3 Buchstaben den Anfang und 3 Buchstaben das Ende bilden, die Eingabe selbst muss aus mindestens 3 Zeichen bestehen. Also erlaubt sein sollte zB. 'Udo', 'Berlin', 'Öde von'. Nicht erlaubt sein sollte 'Ab heute', 'Von heute an', 'da'.

        Das würde dem entsprechen:

        ^([A-Za-zÄäÜüÖöß]{3,}|[A-Za-zÄäÜüÖöß]{3,}[A-Za-zÄäÜüÖöß\s]*[A-Za-zÄäÜüÖöß]{3})$  
        
        
        • entweder kein Leerzeichen, aber mindestens 3 Zeichen (Ausdruck bis zum | )
        • oder:
              + mindestens 3 Zeichen, davon kein Leerzeichen
              + beliebig viele Zeichen, auch Leerzeichen
              + mindestens 3 Zeichen am Ende, davon kein Leerzeichen
          Das ließe sich vielleicht auch noch optimieren.

        Grüße Marco

        --
        Ich spreche Spaghetticode - fließend.
        1. @@misterunknown:

          nuqneH

          Das ließe sich vielleicht auch noch optimieren.

          Ja. A|ABC ist dasselbe wie A(BC)?

          Der von dir gezeigte Ausdruck lässt sich auch als ^([A-Za-zÄäÜüÖöß]{3,}(?:[A-Za-zÄäÜüÖöß\s]*[A-Za-zÄäÜüÖöß]{3})?)$ schreiben.

          Aber nicht, dass er richtig wäre.

          Qapla'

          --
          „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
          1. Moin,

            Aber nicht, dass er richtig wäre.

            Was ist falsch?

            Grüße Marco

            --
            Ich spreche Spaghetticode - fließend.
            1. @@misterunknown:

              nuqneH

              Aber nicht, dass er richtig wäre.

              Was ist falsch?

              Lässt sich wegen mangelhafter Problembeschreibung nicht sagen.

              Qapla'

              --
              „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
          2. Om nah hoo pez nyeetz, Gunnar Bittersmann!

            ^([A-Z]{3,}(?:[A-Z\s]*[A-Z]{3})?)$

            Warum ``?:{:.language-regex}?

            Leistet ^[A-Z]{3,}([A-Z\s]*[A-Z]{3})?$ nicht dasselbe?

            Matthias

            --
            Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Messie und Messier-Katalog.

            1. ^([A-Z]{3,}(?:[A-Z\s]*[A-Z]{3})?)$

              Warum ``?:{:.language-regex}?

              Leistet ^[A-Z]{3,}([A-Z\s]*[A-Z]{3})?$ nicht dasselbe?

              Prinzipiell ja - durch ein Vorangestelltes ?: wird der Inhalt der Klammer nicht in das Ergebnis aufgenommen - spielt also keine Rolle, ich weiß nichtmal ob das performancemäßig einen signifikanten Unterschied bedeutet.

              1. Hi,

                Prinzipiell ja - durch ein Vorangestelltes ?: wird der Inhalt der Klammer nicht in das Ergebnis aufgenommen - spielt also keine Rolle, ich weiß nichtmal ob das performancemäßig einen signifikanten Unterschied bedeutet.

                Laut Jeffrey Friedl ja ("Mastering Regular Expressions" - die Bibel bzgl. Regex)
                Nachgemessen habe ich es nicht. Hängt auch sehr davon ab, ob viel Backtracking bei der Suche gemacht werden muß.

                cu,
                Andreas

                --
                Warum nennt sich Andreas hier MudGuard?
                O o ostern ...
                Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        2. Hallo Marco!

          Danke, das dürfte passen. Ich habe jetzt spontan 30 Tests mit allen möglichen Kombinationen gemacht und bisher war jedes Prüfungsergebnis so wie erwartet. Ich wüsste deshalb jatzt auch nicht, wieso Gunnar das beanstandet.

          Das ließe sich vielleicht auch noch optimieren.

          Das würde mich dann auch interessieren!

          Danke für Deine Antworten, Marco!

          Mit lieben Grüßen

          Melvin Cowznofski

          --

          Melvin Cowznofski
          What – me worry?
          1. Om nah hoo pez nyeetz, Melvin Cowznofski!

            Ich wüsste deshalb jatzt auch nicht, wieso Gunnar das beanstandet.

            Die Beanstandung ist von 12:27. Deine Antwort auf Gunnars Frage von 12:58. Inzwischen könnte sich das geändert haben.

            Matthias

            --
            Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Otto und Ottomane.

          2. Moin,

            Danke, das dürfte passen. Ich habe jetzt spontan 30 Tests mit allen möglichen Kombinationen gemacht und bisher war jedes Prüfungsergebnis so wie erwartet.

            Das einzige, was ich und du vielleicht nicht bedacht haben, ist, dass auch mehrere Leerzeichen hintereinander erlaubt werden. Das müsste man ggf. nochmal ändern.

            Das ließe sich vielleicht auch noch optimieren.
            Das würde mich dann auch interessieren!

            Siehe hier.

            Grüße Marco

            --
            Ich spreche Spaghetticode - fließend.
    2. Und meine Zusatzfrage: Könnte man den Ausdruck auch so erweitern, dass auch die letzten 3 Zeichen der Eingabe nur aus den Buchstaben bestehen darf? Also Leerzeichen nur, wenn die Eingabe mit mindestens 3 Buchstaben beginnt und mit mindestens 3 Buchstaben aufhört. Ginge das?

      ^[A-Za-zÄäÜüÖöß]{3,}[A-Za-zÄäÜüÖöß\s]*[A-Za-zÄäÜüÖöß]{3}$

      Dieser Regex-String funktioniert bei mir in der Form, wie du es willst. Vielleicht könnten aber Regex-Profis den auch noch etwas optimieren.

      Das glaub' ich nicht, Tim ;) nichtmal ansatzweise.

      Damit wäre z.B. auch "12345 abc" erlaubt, aber hier ist das Leerzeichen nicht nach den ersten 3 Zeichen "foo foobar" wäre nicht erlaubt, obwohl das Leerzeichen nach den ersten 3 folgt - danach sind aber nur noch 3 weitere bis stringende erlaubt.

      1. Moin,

        Das glaub' ich nicht, Tim ;) nichtmal ansatzweise.

        Ich bin der Marco :)

        Damit wäre z.B. auch "12345 abc" erlaubt

        Nein, wäre nicht. Zahlen sind gar nicht erlaubt.

        aber hier ist das Leerzeichen nicht nach den ersten 3 Zeichen "foo foobar" wäre nicht erlaubt, obwohl das Leerzeichen nach den ersten 3 folgt - danach sind aber nur noch 3 weitere bis stringende erlaubt.

        Ich verstehe dich irgendwie nicht... "foo foobar" wäre erlaubt. Eine Einschränkung wie viele Leerzeichen es nach den ersten 3 Zeichen geben darf, gab es ja IMHO nicht.

        Grüße Marco

        --
        Ich spreche Spaghetticode - fließend.
        1. Das glaub' ich nicht, Tim ;) nichtmal ansatzweise.

          Ich bin der Marco :)

          Schon gut, Tim :)

          Damit wäre z.B. auch "12345 abc" erlaubt

          Nein, wäre nicht. Zahlen sind gar nicht erlaubt.

          Mein Fehler ich tausche mit "abcde abc" ;)

          aber hier ist das Leerzeichen nicht nach den ersten 3 Zeichen "foo foobar" wäre nicht erlaubt, obwohl das Leerzeichen nach den ersten 3 folgt - danach sind aber nur noch 3 weitere bis stringende erlaubt.

          Ich verstehe dich irgendwie nicht... "foo foobar" wäre erlaubt. Eine Einschränkung wie viele Leerzeichen es nach den ersten 3 Zeichen geben darf, gab es ja IMHO nicht.

          Das ist richtig, aber dein Muster endet mit [A-Za-zÄäÜüÖöß]{3}$ - das schließt "foo foobar" kategorisch aus, weil "foobar" nicht exakt 3 Zeichen der genannten Klasse umfasst.

          1. Moin,

            Schon gut, Tim :)

            Ok, Franz^^

            Mein Fehler ich tausche mit "abcde abc" ;)

            Ok. Das wäre erlaubt, sollte es ja aber (wie wir mittlerweile wissen) auch.

            Das ist richtig, aber dein Muster endet mit [A-Za-zÄäÜüÖöß]{3}$ - das schließt "foo foobar" kategorisch aus, weil "foobar" nicht exakt 3 Zeichen der genannten Klasse umfasst.

            Doch, auch "foo foobar" matched, weil "bar" exakt 3 Zeichen der genannten Klasse umfasst und " foo" dem vorhergehenden Ausdruck entspricht.

            Grüße Marco

            --
            Ich spreche Spaghetticode - fließend.
  3. Om nah hoo pez nyeetz, Melvin Cowznofski!

    ~[1]{3,}([A-Za-zÄäÖöÜüß]|\s)?$~

    Kann mir bitte wer weiterhelfen und mir sagen, wo mein Denkfehler liegt bzw. wie ich den reulären Ausdruck umschreiben muss?

    Schau doch mal, welche Bedeutung das Fragezeichen hat.

    Matthias

    --
    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Halle und Halleffekt.


    1. A-Za-zÄäÖöÜüß ↩︎

    1. Hallo Matthias!

      Schau doch mal, welche Bedeutung das Fragezeichen hat.

      Das Fragezeichen bedeutet "ein oder kein Auftreten". Somit war das falsch eingesetzt von mir, denn ich wollte ja "kein oder beliebig viele Auftreten". Also meinte ich den Stern. Denn * bedeitet "kein oder beliebig viele Auftreten". Danke für den Denkanstoß!

      Mit lieben Grüßen

      Melvin Cowznofski

      --

      Melvin Cowznofski
      What – me worry?
  4. @@Melvin Cowznofski:

    nuqneH

    * Die Eingabe darf nur aus Klein- und Großbuchstaben incl. Ä, ä, Ö, ö, Ü, ü und ß bestehen.

    Welchen sinn soll das haben? „Café“ ist auch ein im Deutschen v erwendetes Wort. Wenn’s um Namen geht: René ist auch nicht gerade selten.

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. Hi!

      @@Melvin Cowznofski:

      nuqneH

      * Die Eingabe darf nur aus Klein- und Großbuchstaben incl. Ä, ä, Ö, ö, Ü, ü und ß bestehen.

      Welchen sinn soll das haben? „Café“ ist auch ein im Deutschen v erwendetes Wort. Wenn’s um Namen geht: René ist auch nicht gerade selten.

      Er sucht wahrscheinlich genau nach diesen Zeichen; und?

      Welchen Sinn hat Deine Frage?

      Aber, hast Du für Dein suggeriertes Problem auch einen Lösungsvorschlag?

      Grüße

      • Steffen
      1. @@Steffen:

        nuqneH

        Aber, hast Du für Dein suggeriertes Problem auch einen Lösungsvorschlag?

        Nein. Siehe Signatur.

        Qapla'

        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)

      2. Hallo Steffen, hallo Gunnar,

        Die Eingabe darf nur aus Klein- und Großbuchstaben incl. Ä, ä, Ö, ö, Ü, ü und ß bestehen.

        Welchen sinn soll das haben? „Café“ ist auch ein im Deutschen v erwendetes Wort. Wenn’s um Namen geht: René ist auch nicht gerade selten.

        Er sucht wahrscheinlich genau nach diesen Zeichen; und?
        Welchen Sinn hat Deine Frage?

        Danke!

        Ich bin auch der Meinung, dass es hier, wenn jemand bemüht versucht ist, ein technisches Problem zu lösen, vorrangig sein sollte, Ideen zur Lösung beizusteuern, als das Problem selbst in Frage zu stellen. Ich weiß schon, wieso ich diese Prüfung will, das tut hier aber nichts zu Sache, wenn ich einen regulären Ausdruck dafür suche.

        Mit lieben Grüßen

        Melvin Cowznofski

        --

        Melvin Cowznofski
        What – me worry?
        1. Er sucht wahrscheinlich genau nach diesen Zeichen; und?
          Welchen Sinn hat Deine Frage?

          Danke!

          Ich bin auch der Meinung, dass es hier, wenn jemand bemüht versucht ist, ein technisches Problem zu lösen, vorrangig sein sollte, Ideen zur Lösung beizusteuern, als das Problem selbst in Frage zu stellen.

          In gefühlt 95 % der Fragestellungen die mir tagtäglich über den Tisch kommen ist die Fragestellung bzw. die Zielsetzung selbst das Problem ohne dass das vom Fragesteller/Auftraggeber erkannt wird. Zudem ist es oft auch so, dass der Fragesteller bei der Problembeschreibung wesentliche details der Anforderung auslässt.

          Ich weiß schon, wieso ich diese Prüfung will, das tut hier aber nichts zu Sache, wenn ich einen regulären Ausdruck dafür suche.

          Das ist unzweifelhaft so, sonst würdest du hier nicht diese Frage stellen.

          Besonders in Kontext von PCRE ist es aber oft so, das der Fragesteller eine Zielsetzung hat die fern jeglicher Sinnhaftigkeit steht. Ohne eine exakte Beschreibung ist es nicht grade einfach einen passenden Ausdruck zu erstellen.

          Wie Gunnar schon sagt: eine Antwort für eine Fragestellung ist nicht notwendigerweise die Lösung des Problems.

          Zudem: wenn man den Kontext kennt, kommt der Geist in Schwung und man ist motivierter darin, eine passende Lösung zu finden (zumindest bei mir so). Der Kontext, das "warum", tut hier also sehrwohl etwas zur Sache, wenn du eine qualifizierte Antwort willst.

          Das ist wie bei Handwerkern: man bezahlt sie für ihre Arbeit und die Sache ist erledigt. Wenn man ihnen aber zwischen drin eine Wurstsemmel gibt, wird die Arbeit wesentlich besser ausgeführt.

          1. Om nah hoo pez nyeetz, suit!

            Ich weiß schon, wieso ich diese Prüfung will, das tut hier aber nichts zu Sache, wenn ich einen regulären Ausdruck dafür suche.
            Wie Gunnar schon sagt: eine Antwort für eine Fragestellung ist nicht notwendigerweise die Lösung des Problems.
            Zudem: wenn man den Kontext kennt, kommt der Geist in Schwung und man ist motivierter darin, eine passende Lösung zu finden (zumindest bei mir so). Der Kontext, das "warum", tut hier also sehrwohl etwas zur Sache, wenn du eine qualifizierte Antwort willst.

            Das kann ich nur unterstreichen. Siehe https://forum.selfhtml.org/?t=215540&m=1476353

            Matthias

            --
            Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Oper und Operation.

  5. Hallo,

    wie immer, wenn ich mich mit regulären Ausdrücken beschäftige, komme ich leider zu keiner Lösung. Eine Formulareingabe soll mittels preg_match() auf ihre Gültigkeit überprüft werden. In diesem Fall bedeutet gültig:

    * Die Eingabe darf nur aus Klein- und Großbuchstaben incl. Ä, ä, Ö, ö, Ü, ü und ß bestehen.
    * Die Eingabe muss aus _mindestens_ 3 dieser Zeichen bestehen.
    * Wenn die Eingabe mehr als diese 3 Zeichen hat, _dann_ darf auch ein Leerzeichen vorkommen. Aber nur nach den ersten 3 Zeichen.

    [1]{3,} ?[A-Za-zÄäÖöÜüß]*$

    Unter "ein Leerzeichen" verstehe ich hier "genau ein Leerzeichen". Sonst:

    [2]{3,}[A-Za-zÄäÖöÜüß ]*$

    Und meine Zusatzfrage: Könnte man den Ausdruck auch so erweitern, dass auch die letzten 3 Zeichen der Eingabe nur aus den Buchstaben bestehen darf? Also Leerzeichen nur, wenn die Eingabe mit mindestens 3 Buchstaben beginnt und mit mindestens 3 Buchstaben aufhört. Ginge das?

    [3]{3,} ?[A-Za-zÄäÖöÜüß]{3,}$

    Unter "Leerzeichen" verstehe ich hier "genau ein Leerzeichen". Sonst:

    [4]{3,}[A-Za-zÄäÖöÜüß ]*[A-Za-zÄäÖöÜüß]{3,}$

    Falls du jedoch meintest, dass generell die letzten 3 Zeichen aus [A-Za-zÄäÖöÜüß] sein müssen und damit auch soetwas wie "abcd" erlaubt sein soll, muss es lauten:

    ^([A-Za-zÄäÖöÜüß]{3,} ?[A-Za-zÄäÖöÜüß]*|[A-Za-zÄäÖöÜüß]*)[A-Za-zÄäÖöÜüß]{3}$

    Unter "Leerzeichen" verstehe ich hier "genau ein Leerzeichen". Sonst:

    ^([A-Za-zÄäÖöÜüß]{3,}[A-Za-zÄäÖöÜüß ]*|[A-Za-zÄäÖöÜüß]*)[A-Za-zÄäÖöÜüß]{3}$

    Such dir das passende raus oder beschreib genauer, was du willst. ;)


    1. A-Za-zÄäÖöÜüß ↩︎

    2. A-Za-zÄäÖöÜüß ↩︎

    3. A-Za-zÄäÖöÜüß ↩︎

    4. A-Za-zÄäÖöÜüß ↩︎

    1. Hallo Whouzuo!

      Danke für Deine Antwort! Ich denke, die Lösung von Marco bzw. die von Gunnar haben mich eh ans Ziel gebracht. Nichtsdestotrotz werde ich mir jetzt auch noch Deine Ideen zu Gemüte führen!

      Mit lieben Grüßen

      Melvin Cowznofski

      --

      Melvin Cowznofski
      What – me worry?