2016-04-21 16 views
-1

Ich habe eine Textbox auf einer meiner Ansichten, und diese Textbox sollte nichts akzeptieren, das mehr als 2 Wörter oder weniger als 2 Wörter hat. Dieser Textkasten benötigt 2 Wörter.Zeichenfolge muss 2 Wörter enthalten

Grundsätzlich akzeptiert dieses Textfeld den Vor- und Nachnamen einer Person. Ich möchte nicht, dass die Leute nur das eine oder das andere eingeben.

Gibt es eine Möglichkeit für einen space Charakter zwischen zwei Worten zu überprüfen und einem anderen space Charakter zusammen mit allen letter, number, usw. nach dem zweiten Wort, wenn es vorhanden ist? Ich denke, wenn der Benutzer versehentlich "fat-fingers" ein extra Leerzeichen nach dem 2. Wort, das sollte gut sein bc gibt es immer noch nur 2 Wörter.

Zum Beispiel:

/* the _ character means space */ 

John    /* not accepted */ 

John_    /* not accepted */ 

John_Smith_a  /* not accepted */ 

John Smith_  /* accepted */ 

Jede Hilfe sehr geschätzt wird.

Antwort

5

Es gibt mehrere Ansätze, die Sie dieses Problem zu lösen verwenden könnte, werde ich ein paar Bewertung über.

Mit der String.Split() Methode

Sie könnten die String.Split() Methode verwenden, um eine Zeichenfolge zu brechen in es auf ein Trennzeichen basiert einzelnen Komponenten ist. In diesem Fall könnten Sie ein Leerzeichen als Trennzeichen verwenden, um die einzelne Worte zu erhalten:

// Get your words, removing any empty entries along the way 
var words = YourTextBox.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 

// Determine how many words you have here 
if(words.Length != 2) 
{ 
    // Tell the user they made a horrible mistake not typing two words here 
} 

einen regulären Ausdruck

Zusätzlich verwenden, könnten Sie versuchen, dies über einen regulären Ausdruck zur Lösung der Regex.IsMatch() mit Methode:

// Check for exactly two words (and allow for beginning and trailing spaces) 
if(!Regex.IsMatch(input,@"^(\s+)?\w+\s+\w+(\s+)?")) 
{ 
    // There are not two words, do something 
} 

Der Ausdruck selbst ein bisschen beängstigend aussehen kann, aber es setzt mich wie folgt zusammen:

Ein "Wort" -Zeichen \w ist ein Sonderzeichen in regulären Ausdrücken, das eine Ziffer, einen Buchstaben oder einen Unterstrich darstellen kann und entspricht [a-zA-Z0-9_].

Unter Nutzung von regulären Ausdrücken RegularExpressionAttribute MVC

Schließlich, da Sie MVC verwenden, können Sie die Vorteile des [RegularExpressionValidation] Attribut auf dem Modell selbst übernehmen könnte:

[RegularExpression(@"^(\s+)?\w+\s+\w+(\s+)?", ErrorMessage = "Exactly two words are required.")] 
public string YourProperty { get; set; } 

Dies wird Ihnen erlauben Rufen Sie einfach die ModelState.IsValid innerhalb Ihrer Controller - Aktion an, um zu sehen, ob Ihr Modell Fehler aufweist oder nicht:

// This will check your validation attributes like the one mentioned above 
if(!ModelState.IsValid) 
{ 
    // You probably have some errors, like not exactly two words 
} 
+0

Was über einen Ausdruck, der etwas wie "Cpl \ 3 John Smith" oder "Mr. John Smith? Ich habe '@'^(\ s +)? [A-Za-z _.-] + \ s \ w + \ s \ w + (\ s +)? $ "' –

+0

Möchten Sie diese zusätzlich zu Ihrem vorherigen Fall zulassen oder als komplett separates Set? Da diese technisch aus drei Wörtern bestehen. –

+0

Ja, zusätzlich zu meinem vorherigen Fall. 3 ist das Maximum und das Minimum –

2

Verwendung es so

string s="John_Smith_a" 
if (s.Trim().Split(new char[] { ' ' }).Length > 1) 
{ 
} 
0

Der sauberste Weg ist regulären Ausdrücke mit der IsMatch Methode wie folgt zu verwenden:

Regex.IsMatch("One Two", @"^\w+\s\w+\s?$") 

Returns true wenn die Eingabe eine Übereinstimmung vorhanden ist.

0
Match m = Regex.Match(this.yourTextBox.Text, @"[^\w\s\w$]", String.Empty); 
if (m.Success) 
    //do something 
else 
    //do something else 

Mit meiner sehr begrenzten Kenntnis der regulären Ausdrücke glaube ich, dass dies Ihr Problem lösen wird.

0

Versuchen Sie, diese

if (str.Split(' ').Length == 2) 
{ 
    //Do Something 
} 

str wird die Variable Zeichenfolge halten

1

Der Tag MVC bedeutet hier zu vergleichen, so würde ich empfehlen, die RegularExpressionAttribute-Klasse:

public class YourModel 
{ 
    [RegularExpression(@"[^\w\s\w$]", ErrorMessage = "You must have exactly two words separated by a space.")] 
    public string YourProperty { get; set; } 
} 
Verwandte Themen