2017-04-20 1 views
2

In meiner C# -App gibt der Benutzer einen Namen ein. Ich möchte einen Regex einstellen, wo der Benutzer nur 2 oder 3 Wörter eingeben kann, d. H. "John Brandy" oder "John Brandy Paul". Und jedes Wort nicht weniger als 2 und mehr als 15 Zeichen.C#: Regex für Namen mit 2 und/oder 3 Wörtern

Match match = Regex.Match(str, @"^[A-Z]+ [A-Z]+ [A-Z]+$", RegexOptions.IgnoreCase); // @"^\b[a-zA-Z]{2,15}\s[a-zA-Z]{2,15}\b"); //@"(\w)\s(\w){2, 3}"); 
Console.WriteLine("PAttern Success = " + match.Success); 

Mit dem aktuellen Muster, ich habe 3 Wörter eingeben.

Antwort

4

Eine weitere Idee, ein quantifiedgroup zu verwenden.

^(?:[A-Z]{2,15}\b ?){2,3}$ 
  • Verwendung mit Ihrem RegexOptions.IgnoreCase
  • den \b steht für word boundary.

See demo at regex101

eine weitere hinzufügen \b vor $like this demo im Raum enden zu verbieten.

+0

Schön, kompakt und gelöst das Problem. – jk121960

+0

Vielen Dank. Funktioniert perfekt. Der Link, den Sie geteilt haben, ist eine große Hilfe, um Muster online auszuprobieren und die Ergebnisse zu sehen. –

+0

Gern geschehen @TrupitiDalia! –

2

Sie können die ? verwenden, um Null und einmal zusammen mit dem Muster in Ihrem Kommentar übereinstimmen.

^[a-zA-Z]{2,15}\s[a-zA-Z]{2,15}(?:\s[a-zA-Z]{2,15})?$ 

Live Demo

Zusätzlich wird die ?: sagt, dass es sich um eine nicht-einfangende Gruppe sein sollte.

Beachten Sie, dass \s auch Zeilenumbrüche enthält, sodass Sie stattdessen [ \t] möchten. Wenn Sie mehrere Leerzeichen zulassen möchten, verwenden Sie [ \t]+.

1

versuchen Sie es, es sollte funktionieren.

^[a-zA-Z]{2,15}\s([a-zA-Z]{2,15}\s)?[a-zA-Z]{2,15}$

+0

Dies ermöglicht Namen von 1 Zeichen und mehr als 15 Zeichen (eines der Anforderungen OP angegeben) –

+0

Entschuldigung hat diesen Teil der Anforderung nicht bemerkt, einfach genug, anstelle des Plus nach der Alpha-Klasse legte {2,15} – jk121960

Verwandte Themen