19.6.4 Prüfung, ob bestimmte Zeichen in einer Zeichenkette vorhanden sind

Mit den folgenden drei Prozeduren kann geprüft werden, ob in einer vorgegebenen Zeichenkette jeweils mindestens ein Zeichen aus einem vorgegebenem Zeichenvorrat vorhanden ist. Die Prozeduren kommen zum Beispiel bei der Prüfung von Passwörtern zum Einsatz, wenn ein starkes Passwort gefordert wird.

Ein starkes Passwort kann m.E. so definiert werden kann:


Für die Arbeit mit regulären Ausdrücken muss die Komponente gb.pcre in das Gambas-Projekt eingebunden sein. Zuerst wird die Funktion Match(Subject As String, Pattern As String) codiert

Public Function Match(Subject As String, Pattern As String) As Boolean
  Dim rRegex As Regexp
 
  rRegex = New Regexp(Subject, Pattern)
 
  If rRegex.Offset = -1 Then
     Return False
  Else
     Return True
  Endif ' rRegex.Offset = -1 → kein Treffer ?
End ' Match(Subject As String, Pattern As String) As Boolean

und für die Prüfung eingesetzt:

Private Function CheckStrongPassword(sPasswort As String) As Boolean 
  Dim sSubject, sPattern As String 
 
  sSubject = sPasswort 
  sPattern = "(?=^.{8,}$)(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)(?![.\n])(?=.*[+#_@!?§$%*]).*$" 
 
  If Match(sSubject, sPattern) = True Then 
     Return True 
  Else 
     Return False 
  Endif ' Match(sSubject, sPattern) = True ?
End ' CheckStrongPassword(sPasswort As String) As Boolean

In ähnlicher Weise kann ermittelt werden, ob der optional eingesetzte Präfix bei der Verschlüsselung einer Zeichenkette nach dem DES-Algorithmus korrekt festgelegt worden ist. Der Präfix ist genau zwei Zeichen lang und enthält Ziffern oder kleine Buchstaben oder Großbuchstaben oder ein Sonderzeichen aus der Menge {./}:

Private Function CheckPrefix(sPrefix As String) As Boolean 
  Dim sSubject, sPattern As String 
' sPräfix-Zeichenvorrat = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./" 
 
  sSubject = sPrefix 
  sPattern = "^([a-zA-Z0-9./]{2})$" ' ** Test-Muster
 
  If Match(sSubject, sPattern) = True Then 
     Return True 
  Else 
     Return False 
  Endif ' Match(sSubject, sPattern) = True ?
End ' CheckPrefix(sPrefix As String) As Boolean 

Die Entwicklung regulärer Ausdrücke ist kein Inhalt des Kapitels. Es werden nur geprüfte Muster aus eigenen Gambas-Projekten übernommen. Der reguläre Ausdruck in ** ist noch einfach – sagen jene, die sich intensiv mit regulären Ausdrücken beschäftigt haben. Hier kommt der Nachweis:

Download