Best Practice Wortregeln RegEx

T

tröööt

Gast
moin ...

ja auch ich kann trollen und mal wieder n neuen thread aufmachen ... geht allerdings um etwas spezielles ...

was ich machen will
im endeffekt nur ne methode der ich einen string übergebe und die mir mit nem bool als return sagt ob der string die gewünschte "form" hat ... folglich : RegEx

wo ich kleinere probleme habe
es geht darum das ich prüfen will
1) ob der string nur aus a-zA-Z0-9 besteht
2) mindestens 2 kleine buchstaben, 2 große buchstaben und 2 zahlen enthält (beliebige reihenfolge)
3) mindestlänge 8

meine bisherigen lösungen

1) mit [c][^a-zA-Z0-9][/c] prüfen ob etwas anderes als alphanum enthalten ist
laut doc gibt es dafür [c]\p{Alnum}[/c] ... schreib ich dann einfach : [c][^\\p{Alnum}][/c] oder wie müsste es korrekt lauten ?

3) String.length()>8 ... kein thema

problem bereitet mir 2)
klar könnte ich mit 3 loops über den string gehen und dabei einfach die entsprechenden zeichen zählen ...
allerdings würde ich es lieber mit RegEx machen .. und ich bin mir auch sicher das es hier was vernünftiges geben sollte ...
spontan würde mir jetzt sowas in diese richtung einfallen
[c](.*[a-z]+.*[a-z]+.*)[/c]
aber wäre das wirklich best pratice ... und würde es auch zum gewünschten ergebnis führen ?


fertigen code will ich nich ... ich bräuchte halt nur hilfe bei den direkten RegEx strings ...
das ganze in ne methode zusammenkleben schaff ich ja dann noch ... aber ich werd halt aus der doc nicht so wirklich schlau ..

wäre nett wenn mir da jemand tipps und hinweise geben könnte ...


cya
 
Zuletzt bearbeitet von einem Moderator:

Evil-Devil

Top Contributor
Ich weiß zwar aus dem Stehgreif nicht wie man die einzelnen Bedingungen am besten verbindet, aber die Mindestmengen kannst du mit dem Mengenoperator definieren.

[c][A-Z]{2,}[/c]
[c][a-z]{2,}[/c]
[c][0-9]{2,}[/c]

Am besten organisierst du dir noch ein RegExp Tool, wenn du nicht schon hast. Das hilft mir bei solchen Dingen immer sehr gut :)
 

timbeau

Gesperrter Benutzer
Finde sowas besser:

Java:
private static boolean isCorrectPassword(String pw){
		int numberCounter = 0;
		int UpperCaseCounter = 0;
		int lowerCaseCounter = 0;
		for(int i = 0; i < pw.length(); i++){
			char c = pw.charAt(i);
			if(Character.isUpperCase(c)){
				UpperCaseCounter++;
			} else if(Character.isLowerCase(c)){
				lowerCaseCounter++;
			} else if(Character.isDigit(c)){
				numberCounter++;
			} else {
				System.err.println("wrong pw");
			}
			
			if(numberCounter>=2 && UpperCaseCounter >=2 && lowerCaseCounter >=2){
				return true;
			}
		}
		return false;
	}
 

faetzminator

Gesperrter Benutzer
Meiner Meinung nach ist Regex für solche Dinge nicht geeignet, wüsste auch nicht wie in einem Ausdruck festlegen. Wenn wir uns aber die ASCII-Tabelle zu Hilfe nehmen, gibts eine tolle Lösung:
Java:
boolean test(final String s) {
    char[] c = s.toCharArray();
    Arrays.sort(c);
    return new String(c).matches("[0-9]{2,}[A-Z]{2,}[a-z]{2,}");
}
Aber verwenden würd ich das nicht unbedingt, lieber durch das Chararray iterieren und zählen...
 
T

tröööt

Gast
[edit][WR]@Slater
es geht hier NICHT um eine passwort-prüfung ... ich bitte daher den original titel wieder herzustellen ... ggf in angepasster form .. aber "passwort regex" ist IMO ein falscher titel für mein problem

es geht hier eher um zusätzliche SQL-injection-prevention in kombination mit PreparedStatements ...

das damit natürlich auch passwörter und user-namen und sonstwas geprüft werden können ist richtig ... aber das ist NICHT der grund des themas ...[/WR]


[ot](warum kommen immer alle gleich auf passwort-prüfung nur weil man mal mit regex n string auf dessen inhalt prüfen will)[/ot][/edit]

@Evil
daran hab ich auch schon gedacht ... allerdings weis ich nicht wie genau man dem mengen-operator umgehen muss das dieser auch die anzahl auf die gesamte gruppe zählt und nicht nur direkt hintereinander folgende zeichen berechnet ... weil "aAbBcC0x0y" wäre ja nach meiner definition korrekt ... nur wie verpack ich das am besten in ne regex das er auch wirklich ABC zählt und nicht A , B und C einzeln ? das ist nämlich mein hauptproblem

@tim
gut .. auch wenn es so nur ein loop ist (wie bin ich eigentlich auf 3 gekommen ?) wäre das ne lösung die so zwar sicher ihren dienst tut ... aber nicht wirklich das was ich suche ... ich möchte es halt nach möglichkeit mit RegEx lösen ...

auch wenns in richtung mikro-optimierung geht : klar wäre ein loop schneller als aufwändig RegEx mehrfach drüber laufen zu lassen ... aber weis net ... empfinde ich irgendwie als so ... "primitiv" ... aber wenns best practise ist werd ichs trotzdem nehmen ... hauptsache am ende kommt das richtige ergebnis raus

(wobei ich in zeile 14 schon mit return false raus wäre)

@featz
hmm .. wäre auch ne möglichkeit ... aber wenn das durchgehen des char-arrays besser wäre werd ichs wohl in richtung von tim machen ...
 

Timothy Truckle

Top Contributor
Ich weiß zwar aus dem Stehgreif nicht wie man die einzelnen Bedingungen am besten verbindet, aber die Mindestmengen kannst du mit dem Mengenoperator definieren.
[c][A-Z]{2,}[/c]
[c][a-z]{2,}[/c]
[c][0-9]{2,}[/c]
Nein, denn dann müssen die Zeichenklassen aufeinander folgend im String stehen,
Code:
"pAsSw0r7"
wäre damit ungültig.

bye
TT
 

Timothy Truckle

Top Contributor
Java:
		Assert.assertEquals(true, "pAsSw0r7".split("\\d", -1).length > 2);
		Assert.assertEquals(true, "pAsSw0r7".split("[a-z]", -1).length > 2);
		Assert.assertEquals(true, "pAsSw0r7".split("[A-Z]", -1).length > 2);
		Assert.assertEquals(false, "pasSw0r7".split("[A-Z]", -1).length > 2);

bye
TT
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Die bisher hier präsentierten im Ansatz auf Regex basierten Lösungen machen genau die gleichen Prüfungen, die man mit indexOf auch machen würde. Sie sparen also keinen Code und sind leider auch noch imperformanter.

Das Problem und auch die Urscache dafür, dass RegExen hier seeehr ungeeignet sind, ist dass RegEx-Strings immer eine Reihenfolge implizieren. Genau das ist hier aber nicht gewünscht. Man müsste also eine RegEx bauen, wo bei jeder der geforderten Zeichenklassen geprüft wird, ob sie überhaupt vorkommt. Dann muss man alle möglichen Kombinationen in einer Gruppe verodern und diese Gruppen wiederum verodern. An der Beschreibung merkst du, wie komplex das ist.

Mach es mit indexOf! Und schreib jetzt nicht wieder: "Ich mögchte es gerne mit RegEx lösen." ;)

Achso, und die POSIX character classes (z.B.
Code:
\p{Alnum}
) funktionieren nur, wenn der zu untersuchende Text US-ASCII codiert ist. Das ist heut zu tage nahezu kein Text mehr.
 
B

...ButAlive

Gast
Das lässt sich nicht mit Regex lösen. Mit Regex kann man nur kontextfreie Grammatiken beschreiben, daher wäre die Lösung von timbeau die beste.
 
T

tröööt

Gast
gut .. das RegEx hier die falsche wahl sind wurde ja nun eingehend erläutert ...

ich denke ich werds dann doch in richtung von tim versuchen ...

naja ... da dachte ich mal : yea ... mit RegEx kann man so viel machen ... und dann such ich mir genau den anwendungsfall raus bei dem man wunderschön demonstrieren kann das man mit RegEx zwar viel aber halt nicht alles lösen kann ...

trotzdem danke für den input


[ot]@Slater
wirklich viel besser ist der titel auch nicht -.-'
anstatt mal abzuwarten das ich das problem etwas näher erläuter gleich erstmal topic-titel ändern ... großes pommes[/ot]
 

faetzminator

Gesperrter Benutzer
naja ... da dachte ich mal : yea ... mit RegEx kann man so viel machen ...

Vieles kann man, manches macht einfach nicht mehr Sinn. Ich hab mal für was einen Parser JSP -> (valides) XML -> JSP gemacht, da war die Transformation eigentlich nur durch Regex Suchen geregelt, das war wirklich overkill. Da würde ich beim nächsten Mal auch irgendwie von Hand parsen...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F RegEx bei Hexstring Allgemeine Java-Themen 8
H Frage regex greater than less than Allgemeine Java-Themen 7
N Regex schlägt nicht an Allgemeine Java-Themen 10
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
T regex case insensitive trimmed Allgemeine Java-Themen 6
S Zeichen | in regex Allgemeine Java-Themen 8
X Regex mit mehreren Bedingungen machen Allgemeine Java-Themen 5
N Hilfe bei RegEx benötigt Allgemeine Java-Themen 3
C Java17 und Regex Allgemeine Java-Themen 13
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
N Gierigen Regex in nicht-gierigen umwandeln Allgemeine Java-Themen 4
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
OnDemand Regex von bis Allgemeine Java-Themen 6
W Versionsnummer auslesen - Regex ist zickig Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
G Regex Allgemeine Java-Themen 2
L regex ganzer string? Allgemeine Java-Themen 2
MiMa Geldbetrag mit regex ermitteln. Allgemeine Java-Themen 14
W RegEx Stringliteral finden - Jflex Allgemeine Java-Themen 5
D Regex Probleme Allgemeine Java-Themen 2
Kirby.exe Regex charakter ignorieren Allgemeine Java-Themen 12
S Java SAT (Haltbarkeitsproblem) mit Regex Allgemeine Java-Themen 6
S [Regex] Nur diese Zeichen beachten Allgemeine Java-Themen 1
M Bitte Hilfe mit REGEX (Negieren) Allgemeine Java-Themen 4
J Compilerfehler bis in java.util.regex.Pattern... Allgemeine Java-Themen 2
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
S Regex mit UND-Verknüpfung Allgemeine Java-Themen 1
P RegEx für Zeiten Allgemeine Java-Themen 7
D Regex: Komplettes Wort bekommen Allgemeine Java-Themen 3
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P RegEx Allgemeine Java-Themen 3
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
Y regex | n-faches Vorkommen oder gar keins Allgemeine Java-Themen 6
turmaline Regex gegen Regex prüfen Allgemeine Java-Themen 4
HarleyDavidson Regex - Optimierung Allgemeine Java-Themen 4
M Regex für Zahleneingabe in JavaFX Textfield Allgemeine Java-Themen 18
A ALTER TABLE mit Hilfe von RegEx zerlegen, splitten Allgemeine Java-Themen 5
H Interpreter-Fehler Regex kompiliert nicht Allgemeine Java-Themen 5
M RegEx alle Matches ausgeben Allgemeine Java-Themen 5
Iron Monkey Mit Regex nach Beträge suchen Allgemeine Java-Themen 4
T REGEX Erklaerung Allgemeine Java-Themen 14
T Nur innerhalb des regex-Match ersetzen Allgemeine Java-Themen 9
H Pic Download / Regex Problem Allgemeine Java-Themen 7
F Frage zu Regex möglich Allgemeine Java-Themen 4
M Regex... mal wieder Allgemeine Java-Themen 3
H RegEx - Ersetze alles bis Leerzeichen Allgemeine Java-Themen 5
S regex verbrät CPU Allgemeine Java-Themen 6
V Regex Bereichs Filter Allgemeine Java-Themen 4
127.0.0.1 RegEx _ und 0-9 Allgemeine Java-Themen 45
S Entfernen von allen Nicht-Buchstaben chars aus einem String ohne Regex..? Allgemeine Java-Themen 10
P Java String Regex Allgemeine Java-Themen 2
AyKay Regex XPath Allgemeine Java-Themen 4
C Regex (Case insensitive und Umlaute) Allgemeine Java-Themen 4
D Regex Raute erkennen Allgemeine Java-Themen 2
nrg Zweistelligen Zahlenbereich mit RegEx Allgemeine Java-Themen 8
GilbertGrape Regex-Problem Allgemeine Java-Themen 2
W Denkblockade RegEx Allgemeine Java-Themen 2
S eigene regEx schreiben Allgemeine Java-Themen 4
C Regex expandieren Allgemeine Java-Themen 6
C Regex Überschniedung von Ausdrücken Allgemeine Java-Themen 16
reibi RegEX - Teilstring Allgemeine Java-Themen 6
R Java-RegEx terminiert nicht Allgemeine Java-Themen 3
M Regex: Ich stehe auf dem Schlauch Allgemeine Java-Themen 2
V Kleines Regex-Problem Allgemeine Java-Themen 3
B Regex "Problem" Allgemeine Java-Themen 4
B RegEx: (Um-)formulieren eines Pattern zur Identifizierung komplexer URLs Allgemeine Java-Themen 7
P RegEx mit HTML Parser für Java möglich? Allgemeine Java-Themen 10
J Regex: Fertige URLS aus Javascript Allgemeine Java-Themen 3
N Java regex Allgemeine Java-Themen 5
K Regex JSON Allgemeine Java-Themen 3
J RegEx Ausdruck Allgemeine Java-Themen 2
J Regex: URLS aus CSS Allgemeine Java-Themen 2
G RegEx- Ausdruck Allgemeine Java-Themen 4
G RegEx kein Unterstrich Allgemeine Java-Themen 2
A Text via RegEx durchsuchen und teile ersetzten Allgemeine Java-Themen 5
C Regex: Zahl ohne führende Null Allgemeine Java-Themen 13
W RegEx Zeile parsen Medium Allgemeine Java-Themen 8
X Java String Regex - Sonderzeichen Filtern Allgemeine Java-Themen 5
S Dateiname mit Regex parsen Allgemeine Java-Themen 3
Loyd Noch ne Regex-Frage: Verschachtelte Ausdrücke Allgemeine Java-Themen 4
R Java Regex Frage Allgemeine Java-Themen 17
Daniel_L RegEx-Frage: Ersetzen in UBB ausschließen Allgemeine Java-Themen 2
M Große Datei mit Regex durchsuchen Allgemeine Java-Themen 4
S regex für einen Link Allgemeine Java-Themen 3
E Regex alles nach ? löschen Allgemeine Java-Themen 4
M RegEx-Frage Allgemeine Java-Themen 2
R Regex Tokenizer Allgemeine Java-Themen 11
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
H RegEX und eMail Allgemeine Java-Themen 4
L-ectron-X Regex zum Entfernen von mehrzeiligen Kommentaren Allgemeine Java-Themen 2
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
nrg Kleine Hilfe mit RegEx Allgemeine Java-Themen 2
B Regex-Fehler nach lib-Update Allgemeine Java-Themen 2
K Contrains oder Regex Allgemeine Java-Themen 3
J replaceAll , "[", "]" & regex Allgemeine Java-Themen 12
P RegEx und $-Zeichen als Literal Allgemeine Java-Themen 5
P RegEx - Worte ausschließen Allgemeine Java-Themen 8
S Regex - was isst denn {javaLetter} und {javaDigit}? Allgemeine Java-Themen 2
D Wie werden Regex-Gruppen kompiliert? Allgemeine Java-Themen 2
Stillmatic RegEx Matches ausgeben Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben