2015-07-28 9 views
6

Chciałbym wiedzieć, w jaki sposób będę mógł zezwolić tylko na znak minus i "-" w polu tekstowym?Jak dopuszczać tylko cyfry i Minus "-" w polu tekstowym

Oto kodowania, że ​​mogę już pozwolić tylko liczby:

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

Więc masz na myśli dodatnią lub ujemną liczbę całkowitą, taką jak 1234 lub -1234, lub masz na myśli coś, co ma znak "-" w tym, jak 800-555-5555? –

Odpowiedz

9

wystarczy dodać - do grupy znaków regex, w pozycji, która nie zarabia zakres znaków:

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

Słodki! Dziękuję :) – CareTaker22

+1

Czy to nie zaakceptuje numeru -87-? – loli

+1

@Loli Myślę, że ta funkcja działa w oparciu o znak po znaku, ma na celu zatrzymanie znaków, nawet w polu tekstowym, więc tak - to by było. Konieczne będzie inne sprawdzanie poprawności w innym miejscu, aby obsłużyć całą rzeczywistą wartość w polu, w zależności od tego, co jest faktycznie akceptowalne. Jest szansa, że ​​będzie to kolejny problem PO, ale tak naprawdę nie jest określony w Q. –

1

Dodaj zdarzenie wprowadzania tekstu podglądu. Podobnie jak: <TextBox PreviewTextInput="PreviewTextInput" />.

Następnie wewnątrz tego ustawienia e.Handled, jeśli tekst nie jest dozwolony.

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

Używam prostego wyrażenia w IsTextAllowed, aby sprawdzić, czy powinienem zezwolić na wpisanie. W moim przypadku chcę tylko pozwolić na liczby, kropki i myślniki.

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

Jeśli chcesz uniemożliwić wklejanie nieprawidłowych danych zahaczyć zdarzenie DataObject.Pasting DataObject.Pasting="TextBoxPasting" jak pokazano tutaj (kod zaczerpnięty):

// 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

Dzięki za komentarz! : D Czy to może uniemożliwić, powiedzmy, że użytkownik wprowadzający to: '101-101-101-'? – CareTaker22

+0

pozwoli na to. –

+0

A co ze znakami specjalnymi. Jeśli ktoś wprowadzi 123213 # 234%, to co? – 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

Myślę, że chcesz coś takiego

^[0-9-]*$ 

Będzie pasować dowolną cyfrę w dowolnym czasie i n brak myślników i będzie ignorować wszelkie inne znak

2

[^-]+[^0-9]+ powinien zapobiegać wszelkim wejściom, które nie są liczbą całkowitą lub ujemną.

Powiązane problemy