TED116: Problem mit regulärem Ausdruck

Hallo,

ich habe ein Problem mit einem regulärem Ausdruck.
Ich möchte überprüfen, ob im Feld "Bemerkungen" Sonderzeichen eingegeben wurden, dies mache ich mit folendem Ausdruck

unless ($bem =~ /^([a-zA-ZäöüÄÖÜß0-9-.\s,:;?!"\ ]+)$/)
{
       ...

}

Wird allerdings im Feld Bermerkung nichts eingegeben, meldet er mireinen Fehler. Dies habe ich doch aber mit /s abgefangen oder?

Was ist nicht korrekt?

grüsse, ted116

  1. Hi,

    Ich möchte überprüfen, ob im Feld "Bemerkungen" Sonderzeichen
    eingegeben wurden, dies mache ich mit folendem Ausdruck

    unless ($bem =~ /^([a-zA-ZäöüÄÖÜß0-9-.\s,:;?!"\ ]+)$/)
    {
           ...

    }

    also, irgendwie suchst du da drin jetzt nach so ziehmlich allen
    Zeichen - ausserdem hast du auch viel falsch maskiert. Versuchs
    doch mal so:

    if ($bem =~ /[aeoeueAeOeUess.,:;?!"]/) #s fuer Mehrzeilige Suche

    evntl. noch anfuegen

    {
    }

    Wird allerdings im Feld Bermerkung nichts eingegeben, meldet er
    mireinen Fehler. Dies habe ich doch aber mit /s abgefangen oder?

    Den Fehler sollte er immer melden, wegen der fehlerhaften
    Maskierung.

    mfg
    CK1

    1. Hallo,

      danke für Deinen Hinweis. An die regulären Ausdrücke muss ich mich erst noch gewöhnen.

      also, irgendwie suchst du da drin jetzt nach so ziehmlich allen
      Zeichen - ausserdem hast du auch viel falsch maskiert. Versuchs
      doch mal so:

      if ($bem =~ /[aeoeueAeOeUess.,:;?!"]/) #s fuer Mehrzeilige Suche

      evntl. noch anfuegen

      Würde dies also auch gehen?
      unless ($bem =~ /^([a-zA-ZäöüÄÖÜß0-9-\s.,:;?!" ]+)$/)

      womit werden Leerzeichen abgefangen?

      grüsse, ted116

  2. Hi!

    unless ($bem =~ /^([a-zA-ZäöüÄÖÜß0-9-.\s,:;?!"\ ]+)$/)
    Wird allerdings im Feld Bermerkung nichts eingegeben, meldet er mireinen Fehler. Dies habe ich doch aber mit /s abgefangen oder?

    /s ? Wo steht das? Und was soll es bewirken?

    Was ist nicht korrekt?

    1. Lies die perlre manpage, und vielleicht auch den Abschnitt "Quote and Quote-like Operators" und folgender in perlop.
    2. Nimm * statt + als Quantifier.
    (Reihenfolge auch vertauschbar ;-) )

    So long

    1. /s ? Wo steht das? Und was soll es bewirken?

      Sorry, ich meinte \s.
      Bedeutung:  findet Leerzeichen sowie Steuerzeichen aus (12-15)
      Ich dachte, so könnte man Leerzeichen abfangen. Nicht korrekt?
      Mit den regulären Ausdrücken bin ich leider noch nicht so einig ;-)

      gruß ted116

      1. Sorry, ich meinte \s.
        Bedeutung:  findet Leerzeichen sowie Steuerzeichen aus (12-15)
        Ich dachte, so könnte man Leerzeichen abfangen. Nicht korrekt?

        Nee. Ein Leerzeichen (bzw. die anderen white-spaces, also \s) ist ein *ganz normales Zeichen*. In Deinem Fall hat der User aber *gar nichts* eingegeben, also noch nicht mal ein Leerzeichen. Mit dem Quantifier + am Ende Deines RegExps verlangst Du, dass *mindestens eines* der dort aufgefuehrten Zeichen vorliegt. Wenn aber *nichts* eingegeben wurde, liegt dieser Fall nicht vor, weshalb in die Fehlermeldung verzweigt wird. Deshalb musst Du stattdessen den Quantifier * verwenden, der erlaubt auch das Vorhandensein *keines* Zeichens, also eines voellig leeren Strings (Nullstring).

        So long

  3. Hallo,

    ich habe ein Problem mit einem regulärem Ausdruck.
    Ich möchte überprüfen, ob im Feld "Bemerkungen" Sonderzeichen eingegeben wurden, dies mache ich mit folendem Ausdruck

    unless ($bem =~ /^([a-zA-ZäöüÄÖÜß0-9-.\s,:;?!"\ ]+)$/)
    {
           ...

    }

    Wird allerdings im Feld Bermerkung nichts eingegeben, meldet er mireinen Fehler. Dies habe ich doch aber mit /s abgefangen oder?

    Was ist nicht korrekt?

    grüsse, ted116

    also ich vermute mal, du verwendest:

    use strict

    irgendwo und wenn das feld bemerkungen nicht ausgefüllt wurde isses leer
    und die var $bem ist nicht definiert.
    eventuell $bem = $IN{'BERMERKUNG'} ?

    der ausdruck ist schon ein wenig abenteuerlich, aber wer's braucht, der braucht's so.

    Struppi.