tulskie

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
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 5275120454

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

Ausgedruckt am: 09.07.2025 um 03:07 Uhr

5175293307
Lösung 5175293307 10.01.2023 aktualisiert um 12:17:13 Uhr
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
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
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
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
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
So komme ich weiter,
besten Dank an dich du hast mir sehr weiter geholfen.