Regular Expression

0

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>

0

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++).

0

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));
    
        }


0
^((1(,0+)?)|(0(,\d+)?))$

1|2

  1. 1 z opcjonalnym (przecinkiem i co najmniej jednym zerem)
  2. 0 z opcjonalnym (przecinkiem i co najmniej jedną cyfrą)
0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1