Zum Inhalt springen

Nr. 349 - und dann hat einfach wer die Tür zugemacht


dgr243

Empfohlene Beiträge

Also ich glaube, bevor irgendjemand "Ich habe das mal eben gealphabetet" schreiben / sagen wird, muss noch eine ganz schöne Zeit ins Land ziehen, falls das überhaupt jemals so weit sein wird.

Ganz davon abgesehen, dass ja eine von BMWs Tochterfirmen den Markennamen bereits hat und nun prüft, ob es markenrechtliche Implikationen gibt. Mal schauen, was da noch so bei raus kommt...

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, dann habe ich auch mal was Offtopic im Offtopic... kennt sich hier zufälligerweise wer mit regulären Ausdrücken aus und kann mir sagen, wieso der folgende Ausdruck:

[0-9a-fA-F]{4}\.{1}[0-9a-fA-F]{4}\.{1}[0-9a-fA-F]{4}|[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}|[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}|[0-9a-fA-F]{12}
auch die Eingabe von "1234567890abcd" als korrekt interpretiert? Sollten doch eigentlich nur die folgenden Formate erlaubt sein, oder? 12:34:56:78:90:12 12-34-56-78-90-12 1234.5678.9012 123456789012 (Statt Zahlen können auch Klein- oder Großbuchstaben von A-F verwendet werden.) Oder liegt das an der PHP-Abfrage
if(preg_match($reg_exp,$string)){ do_something(); }

, dass er da nur überprüft, ob die reg_exp darin ENTHALTEN ist und nicht ob sie ihr ENTSPRICHT?

Die anderen unerwünschten Eingaben werden geblockt durch den regulären Ausdruck, nur die oben genannte Eingabe von

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja ganz genau.

12 Zeichen sind erlaubt, das Eingegebene hat aber mehr als 12 Zeichen und der Ausdruck wird anscheinend wie 12 Zeichen Mindestlänge gewertet, statt dass die Länge bei dem entsprechenden Ausdruck maximal 12 Zeichen sein darf.

Alles drunter wird brav rausgefiltert, alles mit mehr Zeichen, was dem zuletzt angegebenen Format entspricht, hingegen nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem tritt übrigens generell auf, also auch wenn ich z.B. "12:34:56:78:90:12:34" eingebe, wird dies als OK gewertet, statt dass es geblockt wird.

Mit dem ODER werden aber je spezifische reguläre Ausdrücke verknüpft. Ein UND geht ja nicht, weil es ja nicht im einen UND anderen Format sein kann, sondern nur im einen ODER anderen definierten Format.

Ich vermute aber das Problem eher bei der PHP-Funktion, dass sie nur schaut, ob ein entsprechender Ausdruck enthalten ist, nicht ob er dem entsprechenden Ausdruck entspricht. Nur wüsste ich jetzt auch keine andere PHP-Funktion, mit der ich es alternativ überprüfen könnte.

Bearbeitet von Crash2001
Link zu diesem Kommentar
Auf anderen Seiten teilen

ja klar, in PHP wird das Alternative (In Suchmustergruppen) genannt. Vielleicht schafft es aber Abhilfe die Suchmustergruppen in Klammern () zu setzen. Wobei immer noch die Frage bleibt: Warum werden sechs Doppelpunkte durchgelassen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

etwa so:

([0-9a-fA-F]{2}[:-]{1}[0-9a-fA-F]{2}[:-]{1}[0-9a-fA-F]{2}[:-]{1}[0-9a-fA-F]{2}[:-]{1}[0-9a-fA-F]{2}[:-]{1}[0-9a-fA-F]{2})|([0-9a-fA-F]{4}[\.]{1}[0-9a-fA-F]{4}[\.]{1}[0-9a-fA-F]{4})|([0-9a-fA-F]{12})

falls es wichtig ist, eine Mischung von Doppelpunkt und Bindestrich zu unterbinden, muss halt die erste Alternative noch zwischen Doppelpunkt und Bindestrich unterschieden werden.

Ansonsten ist natürlich auch das drumherum der funktion wichtig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moinmoin zusammen.

Also ein bisschen Abkühlung (so um 10 Kelvin oder so) wäre ganz nett - ja.

@*Micha*:

Das ist mehr oder weniger das selbe wie mein regulärer Ausdruck, nur dass dabei auch Kombinationen aus : und - erlaubt sind (was nicht erlaubt sein soll). Zudem Klammern um jeden Teil des regulären Ausdrucks, was jedoch keinen Unterschied macht.

Anscheinend muss man die Anchors nutzen dann. Danke an etreu für den Tip.

Anchors

^ - matches at the start of the line

$ - matches at the end of the line

Mein Ausdruck sieht nun so aus und funktioniert so wie er soll (zumindest sind mir bisher noch keine Fehler dabei aufgefallen):

"/^[0-9a-fA-F]{4}(\.{1}[0-9a-fA-F]{4}){2}$|^[0-9a-fA-F]{2}(:{1}[0-9a-fA-F]{2}){5}$|^[0-9a-fA-F]{2}(\-{1}[0-9a-fA-F]{2}){5}$|^[0-9a-fA-F]{12}$/"

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Crash2001 Bei Regular Expression wird normalerweise wirklich geprüft, ob der Ausdrück in dem String enthalten ist und nicht ob der komplette String exakt dem Ausdruck entspricht. Wenn du das aber möchtest, musst du in deinen regulären Ausdruck die Ausdrücke für Stringstart (^) und Stringende ($) hinzufügen.

Folgender Ausdruck sollte dem entsprechend, was du haben möchtest:


^(??:[[:xdigit:]]{4}\.){2}[[:xdigit:]]{4}|(?:[[:xdigit:]]{2}[:-]){5}[[:xdigit:]]{2}|[[:xdigit:]]{12})$

[/code]

'[[:xdigit:]]' ist die Character Class der hexadezimalen Zeichen.

'(?:)' sind Non-Capture Groups, der Inhalt dieser wird bei der Auswertung der Gruppen nicht gespeichert.

Die Oder-Zweige für 6 2-stellige hexadezimale Zeichen getrennt durch ':' oder '-' habe ich zu einem Zweig zusammengefasst.

Der Reguläre Ausdruck lässt auf https://regex101.com/r/cA4cM4/1 testen.

Edit: Da war ich wohl zu langsam beim schreiben.

Bearbeitet von Dragon8
Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast
Dieses Thema wurde nun für weitere Antworten gesperrt.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...