Benutzer mit den meisten Antworten
Regex-Ausdruck gesucht

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
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- Bearbeitet Tom Lambert (Koopakiller)Moderator Dienstag, 11. August 2015 17:34
- Als Antwort markiert AlexanderRi Mittwoch, 12. August 2015 07:07
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- Bearbeitet Tom Lambert (Koopakiller)Moderator Dienstag, 11. August 2015 17:34
- Als Antwort markiert AlexanderRi Mittwoch, 12. August 2015 07:07
-
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