tulskie
Goto Top

Syntax Prüfung eines Strings

Hallo zusammen,

mir fällt es momentan schwer hier den richtigen Ansatz zu finde.
Ich möchte einen String der über eine Eingabeaufforderung kommt z.B. "1234-i-12345678" auf Richtigkeit überprüfen.
die ersten 4 und die letzten 8-Stellen müssen Zahlen sein. Dazwischen steht immer ein -i-.

Kann mir dabei jemand helfen?
Vorzugsweise in Powershell.

LG und ein gutes neues Jahr

Tulskie

Content-ID: 5275120454

Url: https://administrator.de/forum/syntax-pruefung-eines-strings-5275120454.html

Ausgedruckt am: 06.01.2025 um 21:01 Uhr

5175293307
Lösung 5175293307 10.01.2023 aktualisiert um 12:17:13 Uhr
Goto Top
Regular Expressions sind deine Freunde ...
$pattern = '^\d{4}-i-\d{8}$'  
do{
    $eingabe = Read-Host "String eingeben [4 Ziffern]-i-[8 Ziffern]"  
    if ($eingabe -notmatch $pattern){
        write-host "Eingabe hat ein falsches Format, bitte wiederholen..." -F Yellow  
    }
}until($eingabe -match $pattern)
write-host "Ihre Eingabe lautet: $eingabe"  
Wurstel
Tulskie
Tulskie 10.01.2023 aktualisiert um 12:43:59 Uhr
Goto Top
Ich sollte noch dazuschreiben das alles in einer Do While schleife läuft.

Do {
hier wird über eine Message-Inputbox der String eingegeben
} while (prüfung ob Ausdruck okay, ansonsten erneuter schleifendurchlauf.)
5175293307
5175293307 10.01.2023 aktualisiert um 12:53:17 Uhr
Goto Top
Zitat von @Tulskie:

Ich sollte noch dazuschreiben das alles in einer Do While schleife läuft.

Do {
hier wird über eine Message-Inputbox der String eingegeben
} while (prüfung ob Ausdruck okay, ansonsten erneuter schleifendurchlauf.)

Na und? Macht doch bis auf die Bedingung ehrlich gesagt keinen Unterschied ob nun do-while oder do-until nimmst, steht doch alles was du brauchst schon oben und macht genau das ....

-match Operator und der passende regex pattern, fettich ist die choose.

Code lesen und verstehen und bei dir einbauen ... wo ist jetzt das Problem??
Tulskie
Tulskie 10.01.2023 um 12:58:25 Uhr
Goto Top
Sorry, ich hatte zuerst gepostet dann aufgefrischt face-smile
Das passt so und läuft wie gewünscht.

Eine Frage hätte ich aber noch.
Wenn i oder I eingegeben wird, lässt sich das auch noch filtern?
5175293307
5175293307 10.01.2023 aktualisiert um 13:27:28 Uhr
Goto Top
Zitat von @Tulskie:
Wenn i oder I eingegeben wird, lässt sich das auch noch filtern?
Ja klar, mach aus dem -match einfach ein -cmatch und aus -notmatch ein -cnotmatch dann wird der Regex "case sensitive" überprüft.

Alternativ kannst du das auch im Pattern so anpassen damit er case-sensitive ist, dann ist das Ändern der Operatoren nicht nötig
$pattern = '(?-i)^\d{4}-i-\d{8}$'  
Das (?-i) am Anfang macht ihn case-sensitive

Du könntest dem User Groß- und Kleinschreibung aber auch einfach erlauben und dann hinterher einfach mit
$eingabe.toLower()
alles klein machen face-smile. Das nervt den User weniger face-wink.
Tulskie
Tulskie 10.01.2023 um 13:38:24 Uhr
Goto Top
So komme ich weiter,
besten Dank an dich du hast mir sehr weiter geholfen.