dlaczego takie wyrażenie zadziała i mogę wpisać 000 lub 0,00
@"^[0-1]{1}[,]{0,1}([0-9]{0,2})$"
a gdy chcę zrobić aby był jeden przecinek już nie
@"^[0-1]{1}[,]{1}([0-9]{0,2})$"
Chcę zrobić liczb z przedziału <0,1>
dlaczego takie wyrażenie zadziała i mogę wpisać 000 lub 0,00
@"^[0-1]{1}[,]{0,1}([0-9]{0,2})$"
a gdy chcę zrobić aby był jeden przecinek już nie
@"^[0-1]{1}[,]{1}([0-9]{0,2})$"
Chcę zrobić liczb z przedziału <0,1>
strasznie przekombinowujesz i dajesz za dużo nadmiarowych znaczników.
Zapewne chodzi ci o coś takiego (poprawione twoje wyrażenie):
@"^[0-1],([0-9]{0,2})$"
Albo coś takiego (napisane od nowa):
@"^1,0{0,2}|0,\\d{0,2}$"
Poza tym wygląda mi to na Objective C a nie na C#, więc to chyba nie ten dział (powinno być C/C++).
Jak wprowadzę twoje nic się nie da wpisać
private void textBox2_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
System.Globalization.NumberFormatInfo nfi = System.Globalization.CultureInfo.CurrentCulture.NumberFormat;
string decimalSeparator = nfi.CurrencyDecimalSeparator;
Regex regex = new Regex("^[0-1]{1}[,]{1}([0-9]{0,2})$");
e.Handled = !regex.IsMatch((sender as System.Windows.Controls.TextBox).Text.Insert((sender as System.Windows.Controls.TextBox).SelectionStart, e.Text));
}
^((1(,0+)?)|(0(,\d+)?))$
1|2
W zasadzie po co kombinujesz z RegExp? Jest tyle prostszych metod.
Nie prościej zrobić konwersję do double sprawdzić czy przeszła poprawnie i następnie sprawdzić czy wynik mieści się w wymaganym zakresie i na tej podstawie dokonać walidacji wartości.
Takie rozwiązanie będzie mniej kłopotliwe i bardziej uniwersalne.