none
Regex-Ausdruck gesucht RRS feed

  • Frage

  • Hallo,
    ich suche einen Regex-Ausdruck der nur Ziffern, das Pluszeichen und das Leerzeichen erlaubt.
    Das Pluszeichen darf maximal einmal vorkommen.
    Ziffern und Leerzeichen dürfen mehrmals vorkommen.
    Der Ausdruck soll auf Telefonnummern angewendet werden (+49 6543 12345)

    var regex = new Regex(@"^\+*[+,0-9,\.]+$");

    Dieser Ausdruck erzeugt einen Fehler, wenn nur das Pluszeichen eingegeben wurde. Wenn Ziffern folgen, dann ist die Eingabe fehlerfrei.


    Alexander

    Dienstag, 11. August 2015 15:46

Antworten

  • Hallo Alexander,

    du hast in deinem Regex noch einen Fehler drin. Das Plusziechen kann bei dir mehrfach vorkommen, da du den * Quantifizierer hinter + angegeben hast. Ersetze ihn gegen ein ?, dadurch wird es optional darf also 0-1 mal vorkommen. Innerhalb der eckigen Klammern musst du die Kommas weg lassen, also einfach alles aneinander reihen. Auch uss das + raus, wenn du nur eines am Anfang erlauben willst. (In der Mitte von Telefonnummern kommen ja eigentlich keine vor). Das \. macht für mich keinen Sinn - habe noch nie einen . in einer Nummer gesehen. Stattdessen solltest du \s für das Leerzeichen hinzufügen.

    Wenn der Ausdruck auch korrekt sein soll wenn man nur + eingibt (beispielsweise wärend der Eingabe) muss das + am Ende gegen ein * getauscht werden, da + mindestens 1 und * mindestens 0 erfordert.

    Am Ende sieht es dann so aus:

    var regex1 = @"^\+?[0-9\s]*$"; //erlaubt auch "+"
    var regex2 = @"^\+?[0-9\s]+$"; //erlaubt nicht nur "+"


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Dienstag, 11. August 2015 17:33
    Moderator

Alle Antworten

  • Hallo Alexander,

    du hast in deinem Regex noch einen Fehler drin. Das Plusziechen kann bei dir mehrfach vorkommen, da du den * Quantifizierer hinter + angegeben hast. Ersetze ihn gegen ein ?, dadurch wird es optional darf also 0-1 mal vorkommen. Innerhalb der eckigen Klammern musst du die Kommas weg lassen, also einfach alles aneinander reihen. Auch uss das + raus, wenn du nur eines am Anfang erlauben willst. (In der Mitte von Telefonnummern kommen ja eigentlich keine vor). Das \. macht für mich keinen Sinn - habe noch nie einen . in einer Nummer gesehen. Stattdessen solltest du \s für das Leerzeichen hinzufügen.

    Wenn der Ausdruck auch korrekt sein soll wenn man nur + eingibt (beispielsweise wärend der Eingabe) muss das + am Ende gegen ein * getauscht werden, da + mindestens 1 und * mindestens 0 erfordert.

    Am Ende sieht es dann so aus:

    var regex1 = @"^\+?[0-9\s]*$"; //erlaubt auch "+"
    var regex2 = @"^\+?[0-9\s]+$"; //erlaubt nicht nur "+"


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Dienstag, 11. August 2015 17:33
    Moderator
  • Hallo Alexander,

    es gibt einige Schreibweisen mehr für Telefonnummern in Deutschland und International noch mehr.

    Ein Beispiel: +49 (0) 12345 - 67

    Ich kann mir daher vorstellen, dass der genannte Ausdruck noch nicht hinreichend ist.

    Weitere Varianten und Lösungen findet man durch eine Suche recht schnell, z. B. Regular Expressions to match phone number in Germany mit diesem Ausdruck als Vorschlag:

    (?:\+\d+)?\s*(?:\(\d+\)\s*(?:[/–-]\s*)?)?\d+(?:\s*(?:[\s/–-]\s*)?\d+)*

    Gruß


    - Florian

    Mittwoch, 12. August 2015 07:07