2015-07-28 10 views
6

Ich mag würde wissen, wie ich in der Lage sein würde, nur Zahlen und zu ermöglichen „-“ Minuszeichen in einem Textfeld?Wie nur Zahlen zulassen und ein Minus „-“ in einer Textbox

Hier wird Codierung, dass ich schon nur Zahlen zulassen:

private void txtDicountSettlement_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    Regex regex = new Regex("[^0-9]+"); 
    e.Handled = regex.IsMatch(e.Text); 
} 
+2

Also meinen Sie eine positive oder negative Ganzzahl wie 1234 oder -1234 oder meinen Sie etwas, das ein "-" Zeichen wie 800-555-5555 hat? –

Antwort

9

einfach die - auf Ihre Regex Zeichengruppe hinzufügen, in einer Position, die nicht eine Reihe von Zeichen ist zu machen:

private void txtDicountSettlement_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    Regex regex = new Regex("[^0-9-]+"); 
    e.Handled = regex.IsMatch(e.Text); 
} 
+0

Süß! Danke :) – CareTaker22

+1

Akzeptiert das nicht die Nummer -87-? – loli

+1

@loli Ich denke, dass diese Funktion auf einer Charakter-für-Zeichen-Basis ausgeführt wird, es ist beabsichtigt, die Zeichen zu stoppen, die es sogar in die Textbox machen, also ja - es würde. Sie müssten anderswo eine andere Validierung durchführen, um den gesamten tatsächlichen Wert in der Box zu behandeln, abhängig davon, was tatsächlich akzeptabel ist. Wahrscheinlichkeiten sind, dass das nächste Problem des OPs sein wird, aber es ist nicht wirklich in Q angegeben. –

1

Fügen Sie ein Vorschau-Texteingabeereignis hinzu. Wie so: <TextBox PreviewTextInput="PreviewTextInput" />.

Dann im Inneren setzen Sie den e.Handled, wenn der Text nicht erlaubt ist.

e.Handled = !IsTextAllowed(e.Text); 

Ich benutze eine einfache regex in IsTextAllowed zu sehen, ob ich erlauben sollte, was sie eingegeben haben. In meinem Fall möchte ich nur Zahlen, Punkte und Bindestriche zulassen.

private static bool IsTextAllowed(string text) 
{ 
    Regex regex = new Regex("[^0-9.-]+"); //regex that matches disallowed text 
    return !regex.IsMatch(text); 
} 

Wenn Sie das Einfügen von falschen Daten verhindern wollen DataObject.Pasting="TextBoxPasting" die DataObject.Pasting Ereignis anschließen, wie hier gezeigt (Code exzerpiert):

// Use the DataObject.Pasting Handler 
private void TextBoxPasting(object sender, DataObjectPastingEventArgs e) 
{ 
    if (e.DataObject.GetDataPresent(typeof(String))) 
    { 
     String text = (String)e.DataObject.GetData(typeof(String)); 
     if (!IsTextAllowed(text)) 
     { 
      e.CancelCommand(); 
     } 
    } 
    else 
    { 
     e.CancelCommand(); 
    } 
} 
+0

Danke für den Kommentar! : D Wird dies in der Lage sein zu verbieten, sagen wir der Benutzer, der dies eingibt: '101-101-101-'? – CareTaker22

+0

wird dies ermöglichen. –

+0

Und was ist mit Sonderzeichen. Wenn jemand 123213 # 234% eingeben wird, was dann? – blue

1
private void textBox1_PreviewTextInput(object sender, TextCompositionEventArgs e) 
    { 

     if (!char.IsDigit(e.Text, e.Text.Length - 1)) 
     { 
      if(e.Text.Length != 0 || (e.Text.Length == 0 && e.Substring(e.Text.Length - 1) != "-")) 
       e.Handled = true; 

     } 
    } 
2

Ich glaube, Sie so etwas wie dieses

wollen
^[0-9-]*$ 

Es wird jede Ziffer zu jeder Zeit und n keine Bindestriche übereinstimmen und andere ignorieren Zeichen

2

[^-]+[^0-9]+ sollte jede Eingabe verhindern, die keine Ganzzahl oder eine negative Ganzzahl ist.

Verwandte Themen