2015-07-28 1 views
6

Vorrei sapere come sarei stato in grado di consentire solo numeri e un "-" segno meno in una casella di testo?Come per consentire solo numeri e una meno "-" in una casella di testo

Qui si codifica che posso già consentire solo numeri:

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

Quindi vuoi dire un numero intero positivo o negativo, come 1234 o -1234 O vuoi dire qualcosa che ha un segno - in esso, come 800-555-5555 ""? –

risposta

9

basta aggiungere il - al tuo gruppo di caratteri regex, in una posizione che non sta facendo una serie di personaggi:

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

Dolce! Grazie :) – CareTaker22

+1

Non accetterà il numero -87-? – loli

+1

@loli Penso che questa funzione sia basata su caratteri per carattere, ha lo scopo di fermare i personaggi anche facendoli entrare nella casella di testo, quindi sì - lo farebbe. Dovresti avere una diversa validazione altrove per gestire l'intero valore reale nella casella, a seconda di ciò che è effettivamente accettabile. Le probabilità sono che sta per essere prossimo problema del PO, ma in realtà non è specificato nel D. –

1

Aggiungi un evento di inserimento del testo di anteprima. Mi piace così: <TextBox PreviewTextInput="PreviewTextInput" />.

Poi all'interno che impostare l'e.Handled se il testo non è permesso.

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

Io uso una semplice espressione regolare in IsTextAllowed per vedere se devo permettere quello che hanno digitato. Nel mio caso voglio solo consentire numeri, punti e trattini.

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

Se si desidera impedire l'incollatura dei dati non corretti collegare l'evento DataObject.Pasting DataObject.Pasting="TextBoxPasting" come mostrato di seguito (codice estratto):

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

Grazie per il commento! : D Sarà in grado di disabilitare diciamo che l'utente inserirà questo: '101-101-101-'? – CareTaker22

+0

consentirà questo. –

+0

E i personaggi speciali. Se qualcuno inserirà 123213 # 234%, allora che? – 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

Penso che si desidera qualcosa di simile

^[0-9-]*$ 

Corrisponde a qualsiasi cifra in qualsiasi momento e n no di trattini e ignorerà qualsiasi Tipiche

2

[^-]+[^0-9]+ deve impedire qualsiasi ingresso che non è un numero intero oppure un numero intero negativo.