none
Wie kann ich einen String auf das richtige Formatprüfen ? RRS feed

  • Frage

  • Hi,

    ich weiß nicht wie ich die Frage hätte anders formulieren können...

    Ich habe einen String, welchen ich grob auf sein Format prüfen will.

    $item = "Abteilung;Vorname;Name;Position"
             if ($item -match "\w+\;+\w+\;+\w+\;+\w")
                    {
                        write-host "Zeile ok"
                    }
                    else
                        {
                            Write-Host "Formatfehler"
                        }

    So wie in diesem Beispiel gezeigt funktioniert es ohne Probleme. Es gibt allerdings auch die Möglichkeit das jemand einen Doppelnamen wie z.B. Thomas-Hans  oder Müller-Schmidt besitzt. Der Bindestrich wird nur bei "Abteilung" und "Position" anerkannt und nicht bei "Vorname" und "Nachname".

    Hoffe ihr findet meinen Fehler...

    Grüße :)

    Donnerstag, 6. Juli 2017 08:37

Antworten

  • Wenn Du eine bessere Kontrolle über die erwünschten oder unerwünschten Zeichen in Deinem regulären Ausdruck  haben möchtest, kannst Du den ein bissl "pimpen".  :-D

    Mit dem folgenden Regulären Ausdruck lässt Du in allen 4 Teilstrings alle Groß- und Kleinbuchstaben zu und den Bindestrich - jeweils gefolgt von einem Semikolon.

    $item = "Abteilung;Vorname1-Vorname2;Name-Nachname;Position"
    $item -match "([a-zA-Z-]+);{1}([a-zA-Z-]+);{1}([a-zA-Z-]+);{1}([a-zA-Z-]+)"
    $Matches

    Das lässt sich natürlich noch beliebig komplex gestallten. ;-)


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    • Als Antwort markiert MCMaggi Donnerstag, 6. Juli 2017 10:54
    Donnerstag, 6. Juli 2017 10:30

Alle Antworten

  • (-\w+)? <= Optionaler Ausdruck
    Donnerstag, 6. Juli 2017 08:47
  • hast du es getestet ?
    Donnerstag, 6. Juli 2017 09:00
  • Also isch verwende das z.B. bei der Prüfung auf ein Zahlenformat (5 Vorkomma, optional 2 Nachkomma):
    \d{0,5}(,\d{0,2})?


    Der Ausdruck vor "?" ist optional, daher in Klammern.
    Donnerstag, 6. Juli 2017 09:22
  • Wenn Du eine bessere Kontrolle über die erwünschten oder unerwünschten Zeichen in Deinem regulären Ausdruck  haben möchtest, kannst Du den ein bissl "pimpen".  :-D

    Mit dem folgenden Regulären Ausdruck lässt Du in allen 4 Teilstrings alle Groß- und Kleinbuchstaben zu und den Bindestrich - jeweils gefolgt von einem Semikolon.

    $item = "Abteilung;Vorname1-Vorname2;Name-Nachname;Position"
    $item -match "([a-zA-Z-]+);{1}([a-zA-Z-]+);{1}([a-zA-Z-]+);{1}([a-zA-Z-]+)"
    $Matches

    Das lässt sich natürlich noch beliebig komplex gestallten. ;-)


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    • Als Antwort markiert MCMaggi Donnerstag, 6. Juli 2017 10:54
    Donnerstag, 6. Juli 2017 10:30
  • Genau so!

    hab vorher fast noch nie damit gearbeitet aber ist eigentlich ganz logisch aufgebaut :D

    Dank dir!

    Grüße

    Donnerstag, 6. Juli 2017 10:55
  • \w = ein Buchstabe, eine Ziffer oder der Unterstrich, also [a-zA-Z_0-9] (und evtl. auch nicht-lateinische Buchstaben, z. B. Umlaute

    [a-zA-Z-] = alle Sonderzeichen, Akzente, Umlaute sind dann leider nicht zulässig, sondern eben nur Buchstaben und der Bindestrich.

    ? = Der voranstehende Ausdruck ist optional, er kann einmal vorkommen, braucht es aber nicht, das heißt, der Ausdruck kommt null- oder einmal vor. (Dies entspricht {0,1})

    usw.usw.:
    https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck

    Donnerstag, 6. Juli 2017 11:07