Fehler bei Regex Prüfung der Profilfelder

  • Affected Version
    WoltLab Suite 5.5
    Affected App
    WoltLab Suite Core

    Servus. :)

    Bei der Regulären Ausdruck Validierung der Profilfelder, gibt es 2 Probleme/Fehler.

    Der Reguläre Ausdruck wäre folgender:

    (Bin mir nicht sicher, ob der komplett richtig ist, aber auf regex101.com funktioniert es.)

    Code
    ^https:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,3}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$

    Dieses Regex soll nur eine 'URL' validieren, die u.a. mit 'https://www.' anfängt und die Domain nur 6 Zeichen haben darf.

    Damit sichergestellt wird, dass in der Textbox nur eine URL eingetragen werden darf und die Domain von der länge her übereinstimmt.

    1. Auch wenn es kein Pflichtfeld ist, wird mit gespeichertem Regex, kein leeres Profilfeld akzeptiert.

    -> Der Fehler sollte nicht auftauchen, da: "Das Feld muss zwingend durch den Eigentümer ausgefüllt werden." nicht ausgewählt wurde.


    2. Wenn die Regex Prüfung nicht bestanden wird, kommt die Meldung:

    Code
    Service Unavailable
    The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

    -> Hier sollte allerdings eine Fehlermeldung kommen, die einem mitteilt, dass die Eingabe nicht korrekt ist.

  • Zu 1.: Dann musst du deinen regulären Ausdruck auch entsprechend definieren. Ungetestet:

    Code
    ^(|https:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,3}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*))$

    Zu 2.: Das ist ein generischer Serverfehler. Entweder selbst im Log schauen oder den Hoster kontaktieren.

  • Zu 1.: Dann musst du deinen regulären Ausdruck auch entsprechend definieren. Ungetestet:

    Scheint zu funktionieren, danke Dir.

    Es tritt auch kein Fehler mehr auf, lag also an nem falschen Regex Code.

    Bin bin Regex nicht wirklich vertraut und da es anscheinend nirgendwo vernünftige Erklärungen mit Beispielen dazu gibt, nicht gerade einfach.

    Einzelne Zeichen bekomme ich noch hin, aber mehrere zusammenfügen, geht dann meist in die Hose. 😅

    Da muss ich noch etwas tüfteln.

    Zu 2.: Das ist ein generischer Serverfehler. Entweder selbst im Log schauen oder den Hoster kontaktieren.

    Der Fehler tritt ja nur mit Regex auf, sonst nicht.

    Sobald ich das Regex Feld im ACP leer lasse, ist kein Fehler mehr vorhanden.

    Evtl. sollte hier geprüft werden, ob der Regex Code überhaupt richtig ist, bevor man ihn speichern kann? 🤔

  • Naja, liegt wohl auch daran das:

    Quote

    Service Unavailable

    The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

    Ein Server Fehler ist, und nichts mit dem WSC zu tun hat in dem Moment (denke eher das da ein Problem mit der Server Konfiguration besteht).

    Projekte:

    XIVDATA - Eorzea Database

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • Vielleicht war es nur Zufall, aber der Fehler tritt mit meinem Code nun auch nicht mehr auf. :/


    Allerdings bleibt der Fehler, dass ich die Profil Einstellungen nicht speichern kann, wenn das Feld leer ist obwohl es ein optionales Feld ist.

  • Das liegt an deinem Regex, der Priorität gegenüber der Einstellung hat. Siehe dazu die erste Antwort von Black Rider weiter oben.

    Wenn ich den Code von Black Rider nehme, tritt das Problem nicht auf und ich kann das Feld leer lassen, beim speichern des Profils.

    Nur bei meinem Regex tritt der Fehler auf, dass ich im Profil nicht mehr speichern kann, wenn das Feld leer ist.

    Würde bedeuten, dass ein fehlerhaftes Regex dazu führt, dass die Option "Das Feld muss zwingend durch den Eigentümer ausgefüllt werden." übergangen wird. :/

  • Dein Regex ist nicht fehlerhaft. Nur wenn ein Regex angegeben ist, dann wird dieser auch überprüft. Und da dein Regex zwingend einen Wert erwartet hatte, gab es auch eine entsprechende Fehlermeldung.

    Und nochmal: dass es dann eine generische Fehlermeldung des Webservers gab, ist auf einen Konfigurationsfehler innerhalb des Webservers zurückzuführen.

  • Dein Regex ist nicht fehlerhaft. Nur wenn ein Regex angegeben ist, dann wird dieser auch überprüft.

    Das heißt dann aber auch, wie oben beschrieben, dass die Option "Das Feld muss zwingend durch den Eigentümer ausgefüllt werden." übergangen wird.

    Hier sollte dann aber diese Option allerdings priorisiert werden, also vor der Regex Prüfung.

    Das heißt, wenn das Feld im Profil leer ist, sollte keine Regex Prüfung stattfinden, wenn die Option "Das Feld muss zwingend durch den Eigentümer ausgefüllt werden." aktiviert ist. :)

  • Das heißt dann aber auch, wie oben beschrieben, dass die Option "Das Feld muss zwingend durch den Eigentümer ausgefüllt werden." übergangen wird.


    Hier sollte dann aber diese Option allerdings priorisiert werden, also vor der Regex Prüfung.

    Nö, heißt es nicht und das hat auch nicht wirklich etwas mit Priorisierung zu tun. Dein Regex verbietet einen leeren Wert. Punkt. Da gibt es absolut keinen Interpretationspielraum, selbst wenn die entsprechende Checkbox oberste Priorität hätte. Entweder möchtest du, dass dein Regex berücksichtigt wird, oder du möchtest das nicht. Und wenn du das möchtest, dann logischerweise mit allen Konsequenzen. Wäre ein leerer Wert erlaubt, würde das deinem Regex widersprechen. Die Software weiß nicht, was du dir gedacht hast. Die Software kann nur deine Vorgabe exakt oder gar nicht umsetzen.

    Die Lösung hat dir SoftCreatR ja schon genannt. Ein Softwarefehler ist das definitiv keiner.

  • Nö, heißt es nicht und das hat auch nicht wirklich etwas mit Priorisierung zu tun. Dein Regex verbietet einen leeren Wert. Punkt. Da gibt es absolut keinen Interpretationspielraum, selbst wenn die entsprechende Checkbox oberste Priorität hätte.

    Du verstehst offenkundig nicht, worauf ich hinaus will.

    Also nochmal.

    Warum sollte man eine Überprüfung eines leeren Feldes per Regex machen, wenn es doch dafür bereits eine Checkbox gibt?

    Wenn die Checkbox im ACP erlaubt, dass das Feld leer sein darf, dann sollte die Regex Prüfung eigentlich gar nicht erst stattfinden, denn die Option sollte nicht gleichzeitig ein leeres Feld erlauben aber durch Regex wieder verboten werden.

    Hier sollte beim Speichervorgang vorher geprüft werden, ob die Option "Das Feld muss zwingend durch den Eigentümer ausgefüllt werden." deaktiviert und das Profilfeld leer ist, bevor man die Regex Prüfung startet.

    Oder eben die Checkbox deaktivieren/ausgrauen, sobald ein Regex eingefügt wird, damit man es wenigstens von vornerein weiß.

    Ich wusste es vorher nicht (Steht ja auch nirgends) und sehe es persönlich als Logikfehler an. ;)

  • Dann müsste die Software vorab deinen Regulären Ausdruck überprüfen, was er tut.

    Ohne jetzt extra GitHub zu öffnen, gehe ich davon aus, das Woltlab da das üblich Schema wie bei vielen anderen Anwendungen ebenfalls verwendet: die Regel wird immer geprüft. Egal ob Pflicht oder nicht. Die Auswahl definiert nur, ob das Feld auch leer sein darf, wenn dein regulärer Ausdruck das aber verbietet, haut der immer ein false raus, wodurch das Feld als Fehler markiert wird.

    Projekte:

    XIVDATA - Eorzea Database

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • Dann müsste die Software vorab deinen Regulären Ausdruck überprüfen, was er tut.

    Andersrum, erst prüfen, ob das Feld leer sein darf (Option im ACP), dann das eigentliche Feld auf Inhalt prüfen (null). :)

    Wenn das Feld leer ist und auch leer gelassen werden darf, dann keine Regex Prüfung durchführen.

    Wenn das Feld nicht leer ist, dann die Regex Prüfung durchführen.

    Das Regex selbst, benötigt also gar keine Überprüfung auf leerem Inhalt, da es ja bereits die Option im ACP dafür gibt.

    Ohne jetzt extra GitHub zu öffnen, gehe ich davon aus, das Woltlab da das üblich Schema wie bei vielen anderen Anwendungen ebenfalls verwendet: die Regel wird immer geprüft. Egal ob Pflicht oder nicht. Die Auswahl definiert nur, ob das Feld auch leer sein darf, wenn dein regulärer Ausdruck das aber verbietet, haut der immer ein false raus, wodurch das Feld als Fehler markiert wird.

    Richtig und das ist m.M. nach unlogisch.

    Hier sollte man vielleicht die Checkbox dann ausgrauen o.ä., damit man weiß, dass die Option nicht berücksichtigt wird.

  • Hier sollte man vielleicht die Checkbox dann ausgrauen o.ä., damit man weiß, dass die Option nicht berücksichtigt wird.

    Eben nicht. Das sind ja zwei verschiedene Sachen.

    Die Checkbox sagt ja lediglich aus, dass bei diesem Field zwingend etwas angegeben werden muss (durch die Software) ohne spezifische Validierung.

    Das RegEx-Feld nimmt die Software 1:1 und validiert diese so exact wie das RegEx eben tut.

    Demnach wenn dort im Code halt abgefragt wird, dass das Feld befuellt sein muss, kommt logischerweise ein Fehler wenn das Feld leer ist.

    Dabei ist es unerheblich ob der Button leer ist. Die Software will villeicht nicht, dass das Feld befuelllt werden muss, die RegEx aber schon.

    Henne/Ei Problem.

    Med venlig hilsen / Regards,

    Alex

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!