Java regex für Kleinbuchstaben und Sonderzeichen?

4 Antworten

Weder Kleinbuchstaben noch Sonderzeichen sind genauer definiert, bzw. hängen zumindest von der aktuellen Locale ab.

Sind Umlaute wie "ä", "ö", "ü" und "ß" auch Kleinbuchstaben für dich? Wie sieht es mit französischen Akzenten aus? Was ist mit "あ", "い" oder "う"?

Und was ist ein Sonderzeichen? Zählen dazu auch Nicht-ASCII-Sonderzeichen, wie "€" oder gar "☆"?

Ich denke, deine vorliegenden Anforderungen sind einer der Fälle, die man eben nicht mit regulären Ausdrücken erschlagen, sondern lieber in einer Schleife mit Character.getType() behandeln sollte.

Im einfachsten Falle ginge natürlich:

^[a-zäöüß_#*/+-]+$

Da kannst du dann natürlich alles hinzufügen, was du als Sonderzeichen erachtest. :)

Naja, musst letztendlich alles du selbst entscheiden.

Viel Spaß noch! :)

PS: Falls du das Ganze für eine Passwort-Überprüfung nehmen willst, mach es dir doch so einfach, wie meine Bank! Fürs Online-Banking lassen die nur Passwörter mit einer fixen Länge von 6 Zeichen zu und erlaubt sind ausschließlich Zahlen von 0 bis 9.

Yeah, Online-Banking 2018 in Deutschland! Security made in Germany! ;)

PPS: Die Codeformatierung hier auf GF kommt ja echt super mit RegExen klar. :)

Isendrak  18.03.2018, 11:25
Security made in Germany! ;)

Onlinebanking ist doch im #Neuland, da ist das doch wohl nicht überaschend... ;)

Die Codeformatierung hier auf GF kommt ja echt super mit RegExen klar. :)

Und zwar genau so "gut" wie mit fast allem anderen (hab bis heute nicht herausgefunden, für welche Sprache der Syntax-Highlighter eigentlich ausgelegt ist. Evtl. C/C++?). ;)

2
tavkomann  18.03.2018, 23:43
@Isendrak
hab bis heute nicht herausgefunden, für welche Sprache der Syntax-Highlighter eigentlich ausgelegt ist. Evtl. C/C++?

Automatische Erkennung: Es wird highlight.js verwendet. Du kannst im Quellcode anhand der CSS-Klasse die Sprache sehen, die erkannt worden ist. Bei der obigen Antwort ist Powershell erkannt worden.

1

Bin mir nicht ganz sicher, ob Java evtl. ne leicht andere RegEx-Syntax verwendet, aber das sollte funktionieren:

[^A-Z0-9]*

Soll heissen: Nimm alle Zeichen, die weder Großbuchstabe noch Ziffern sind.

KarlRanseierIII  17.03.2018, 17:57

Gut gedacht, was ist aber mit den Zeichen, die weder Großbuchstabe, noch Ziffer, noch Sonderzeichen sind? Davon gibt es eine Menge (Steuercodes als prominentestes Beispiel)

0
Isendrak  17.03.2018, 18:07
@KarlRanseierIII

Naja, Sonderzeichen ist ein dehnbarer Begriff, kann also je nach Definition u.a. Steuerzeichen meinen. ;)

1
KnorxyThieus  17.03.2018, 18:16

Cool, wie hast du das Syntaxhighlighting hinbekommen? :)

0
Isendrak  17.03.2018, 18:20
@KnorxyThieus

Genau wie du in deiner Antwort.

P.S.: Die Codeformatierung hier ist zwar schon ganz gut *hüstel*, wär aber besser, wenn man angeben könnte, welche Sprache da "gesyntaxhiglightet" werden soll. ;)

0
KnorxyThieus  17.03.2018, 18:24
@Isendrak

Der hat von alleine nicht nur Farben, sondern sogar Hervorhebungen hinzugefügt? :o

Na ja, nicht mal bei StackOverflow geht das - lieber eine KI richten lassen ;)

0
Isendrak  17.03.2018, 18:27
@KnorxyThieus

Naja, ist nicht so schwierig... Bisschen Mustererkennung, bisschen auswerten, fertig... ;)

Kann aber je nach Sprache auch zu nem Haufen "Glarblark" führen.

0
KnorxyThieus  17.03.2018, 19:34
@Isendrak

Glarbark? Drei Treffer im WWW :D

Ich meinte eine KI, die ohne explizite Nennung der Sprache auskommt.

1
Isendrak  17.03.2018, 19:41
@KnorxyThieus
Glarbark? Drei Treffer im WWW :D

WTF?! XD

Ich meinte eine KI, die ohne explizite Nennung der Sprache auskommt.

Das wär natürlich ne Idee. Und könnte evtl. auch mit *Trommelwirbel* Mustererkennung mindestens für Phase 1 arbeiten. z.B.: Haben wir irgendwo "public static void Main(string[] args)"? Dann kommt C# in die engere Wahl. Findet sich "#include <iostream>"? Dann ists wahrscheinlich C++. usw...

1
TeeTier  17.03.2018, 20:06

Das "matcht" dann aber auch ☆ oder ♪, was evtl. nicht gewünscht ist. :)

1
Isendrak  17.03.2018, 20:38
@TeeTier

Dann müsste der Begriff "Sonderzeichen" evtl. genauer definiert werden... ;)

1

Kleinbuchstaben sind

[a-z]

und bei den Sonderzeichen gibts ne riesige Menge. Da kann man am besten im Ausschlussverfahren arbeiten.

Also alles, außer [0-9],[A-Z]

Woher ich das weiß:Berufserfahrung – Java-Entwickler von Batch- und Webanwendungen

Versuch es mal mit \p, damit kannst du gezielt einzelne Unicode-Zeichenklassen heraussuchen.

Also etwa:

[\p{Ll}\p{P}\p{S}]*
Woher ich das weiß:Studium / Ausbildung – Studiere Informatik und programmiere aus Leidenschaft
TeeTier  17.03.2018, 20:22

Das war auch mein erster Gedanke, aber die Zeichenklassen sind vermutlich zu großen Teilen zu umfangreich und Locale-abhängig, sodass bei einem schnellen Blick in den Code vermutlich gar nicht klar ist, welche Zeichen konkret gematcht werden. :)

0
KnorxyThieus  18.03.2018, 11:47
@TeeTier

Es hängt einfach von der Definition "Sonderzeichen" ab. Mit Unicode geht das jedenfalls am allgemeinsten, oder was meinst du?

In vernünftigen Architekturen wie .NET kann man reguläre Ausdrücke übrigens auch auf mehrere Zeilen aufteilen und inline kommentieren.

0