Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1708to1712
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Regular Expressions in VBA

Regular Expressions in VBA
20.08.2019 14:03:21
Bernd
Hallo,
ich versuche Passwörter zu erzeugen, die bestimmten Regeln unterliegen. Diese Regeln möchte ich als Regular Expression festlegen.
Dann soll ein Passwort generiert werden, das ebenfalls diesen Regeln entspricht
Und zum Schluss soll gegen ein Pattern geprüft werden, ob das Passwort tatsächlich so aufgebaut ist, wie es die Regeln wollen.
Sorry, ich bin neu in VBA und in Regex, daher bin ich hier noch nicht fündig geworden.
Wie muss die Regex aussehen, wenn folgende Regeln gelten:
Mindestens 1 Kleinbuchstabe
Mindestens 1 Großbuchstabe
Mindestens 1 Zahl
Mindestens 1 Sonderzeichen
Keine Whitespaces
Mindestens 8 Zeichen Länge.
Die Zeichen dürften überall im Passwort auftauchen.
Im Moment versuche ich das Passwort zu erzeugen, indem ich aus dem Gesamtstring "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + Sonderzeichen per Random bei jedem Durchlauf ein Zeichen rauspicke und zum Passwort zusammensetze.
Wie müsste die Regex für die Passwortregeln aussehen? und wie implementiere ich genau diese Regel in VBA? Die Schreibweisen unterscheiden sich anscheinend von Sprache zu Sprache.
Wie kann ich vergleichen, ob das Passwort dem Pattern entspricht?
Oder ist es vielleicht sogar möglich, anhand des Patterns gleich ein korrektes Passwort zu kreieren?
Mein Code bisher sieht leider sehr unschön aus:
Ich lasse per Random je ein Zeichen Uppercase, Lowercase, Zahl und Sonderzeichen extrahieren.
oneLower = Mid$(LOWER, Int(lowerLength * Rnd + 1), 1)
oneUpper = Mid$(UPPER, Int(upperLength * Rnd + 1), 1)
oneDigit = Mid$(DIGITS, Int(digitsLength * Rnd + 1), 1)
onePunctuation = Mid$(PUNCTUATION, Int(punctuationLength * Rnd + 1), 1)
Jeweils aus einem String für Uppercase, Lowercase.....
Die verbleibenden vier Zeichen erzeuge ich aus der Gesamtliste aller Zeichen.
For k = 1 To (passwordLength - 4)
tempPassword = tempPassword & Mid$(charList, Int(charListLength * Rnd + 1), 1)
Next
Und setze die einzelnen Zeichen plus die zusätzliche vier zu einem Passwort zusammen.
initialPassword = oneLower & oneUpper & oneDigit & onePunctuation & tempPassword
Damit man kein Muster erkennen kann, würfele ich alle Buchstaben darin nochmal in zufälliger Reihenfolge um:
Do While Len(initialPassword) größer 0
selectedChar = Int(Len(initialPassword) * Rnd + 1)
oneChar = Mid$(initialPassword, selectedChar, 1)
initialPassword = Replace(initialPassword, oneChar, "")
tempPassword = tempPassword & oneChar
initialPasswordLength = Len(initialPassword)
Loop
Diese Lösung funktioniert und ich kriege so konforme Passwörter auch ohne RegEx. Aber Regex wäre vermutlich schöner und eleganter, weil ich gleich ein Passwort in voller Länge erzeugen kann, und so lange gegen das Regex-Pattern vergleichen kann, bis es diesen Vorgaben entspricht.
Könnt ihr mir an der Stelle helfen?
Gruß
Bernd

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Versuch
20.08.2019 14:21:33
Fennek
Hallo,
zuerst zum Verständnis: der folgende Code ist im Editor zusammengestellt und nicht getestet:

Function Password(TextValue As String) As boolean
dim b as boolean
b = true
with CreateObject("VBscript.regexp")
.Pattern = "[a-z]"
b =   and .test(TextValue)
.pattern = "[A-Z]"
b =   and .test(TextValue)
.pattern = "\d"
b =   and .test(TextValue)
.patter = "[!§$%&_-]" 'ergänzen, wildcharacters mit \ markieren
b =   and .test(TextValue)
End With
Password = b
End Function
Schaun wir mal ...
mfg
AW: Versuch
20.08.2019 14:49:40
Bernd
Hallo,
danke für die Hilfe, aber das funktioniert irgendwie noch nicht.
Im VBA-Editor werden die Zeilen "b = and .test(TextValue)" alle rot markiert.
Fehlt da noch etwas? Den Verweis für Regex habe ich jedenfalls gesetzt.
Gruß
Bernd
Anzeige
AW: Versuch
20.08.2019 14:49:41
Bernd
Hallo,
danke für die Hilfe, aber das funktioniert irgendwie noch nicht.
Im VBA-Editor werden die Zeilen "b = and .test(TextValue)" alle rot markiert.
Fehlt da noch etwas? Den Verweis für Regex habe ich jedenfalls gesetzt.
Gruß
Bernd
AW: Versuch II
20.08.2019 15:06:33
Fennek
etwas Eigenleistung wäre nicht schlecht

Function Password(TextValue As String) As boolean
dim Bo as boolean
bo = true
with CreateObject("VBscript.regexp")
.Pattern = "[a-z]"
bo =   bo and .test(TextValue)
.pattern = "[A-Z]"
bo =  bo  and .test(TextValue)
.pattern = "\d"
bo =  bo and .test(TextValue)
.pattern = "[!§$%&_-]" 'ergänzen, wildcharacters mit \ markieren
bo = bo  and .test(TextValue)
.pattern = "\s"
bo = bo and not .test(TextValue)
End With
Password = b
End Function

Anzeige
AW: Regular Expressions in VBA
20.08.2019 15:34:09
Daniel
Hi
weiß nicht, obs wirklich sinnvoll ist, in einer Schleife ein rein zufälliges Password zu prüfen und dann zu vergleichen, ob es konfrom ist.
ich würde bei deiner alten Methode bleiben, die geht auch etwas eleganter:
Sub Passwortgenerator()
Dim Z(1 To 5)
Dim txt As String, T As String
Dim i As Long, j As Long
Z(1) = "abdefghijklmnopqrstuvwxyz"
Z(2) = UCase(Z(1))
Z(3) = "0123456789"
Z(4) = "!§$%&/():_-"
For i = 1 To 8
j = WorksheetFunction.Min(i, 5)
txt = txt & Mid(Z(j), WorksheetFunction.RandBetween(1, Len(Z(j))), 1)
If i 
Gruß Daniel
Anzeige
AW: Regular Expressions in VBA
21.08.2019 08:13:02
Bernd
Vielen, vielen Dank euch Beiden. Eure Lösungen funktionieren prima!!!!
Gruß
Bernd

6 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige