簡體   English   中英

正則表達式在PreviewTextInput中:僅介於0.0到1.0之間的小數

[英]Regex in PreviewTextInput: only decimals between 0.0 and 1.0

我想要一個正則表達式,它只允許在文本框中輸入介於0.0和1.0之間的數字。

但是它應該在方法PreviewTextInput中(C#,WPF項目)

所以普通的正則表達式不起作用

Regex regex = new Regex(@"^0|0.0|0\.[0-9]*|1\.0|1$");

我找到了一個正則表達式,它允許在PreviewTextInput方法中使用所有小數:

Regex regex = new Regex("^[.][0-9]+$|^[0-1.]*[.,]{0,1}[0-9]*$");

如何將此正則表達式更改為僅接受0-1之間的小數?

謝謝。

我的小數方法:

private void tb_PreviewTextInput(object sender, TextCompositionEventArgs e)
    {
        Regex regex = new Regex("^[.][0-9]+$|^[0-1.]*[.,]{0,1}[0-9]*$");
        e.Handled = !regex.IsMatch((sender as TextBox).Text.Insert((sender as TextBox).SelectionStart, e.Text));
    }

我的0-1之間的十進制方法(無效):

        private void tb_Surface_PreviewTextInput(object sender, TextCompositionEventArgs e)
    {
        Regex regex = new Regex(@"^(0?\.[0-9]+|1\.0)$");
        e.Handled = !regex.IsMatch(e.Text);
       // e.Handled = !regex.IsMatch((sender as TextBox).Text.Insert((sender as TextBox).SelectionStart, e.Text));

    }

您可以嘗試此正則表達式。

@"^(?:0?\.[0-9]+|1\.0)$"

關於@"^0|0.0|0\\.[0-9]*|1\\.0|1$" :有兩個錯誤:

1)其中一個點不轉義,因此可以匹配任何字符。
2) ^$僅分別出現在交替的第一個和最后一個分支中,但與每個分支都不相關。 為此,您必須將所有分支置於非捕獲組中。

關於"^[.][0-9]+$|^[0-1.]*[.,]{0,1}[0-9]*$" :第一個分支正確,第二個分支正確假。

1) [0-1.]*可寫入[01.]* (有0和1之間沒有字符,沒有必要把的范圍)允許的任何組合01. 1111111111101000101.00.111.. 不確定在此處允許點是個好主意。
2)可以寫成[.,]? [.,]{0,1} [.,]? :為什么這次要允許逗號?
3) [.,]{0,1}[0-9]*$如果點(或逗號)是可選的,則由於[0-9]* ,此子模式可以匹配任何整數。

我認為您必須考慮使用非捕獲組來構建您的模式。 從第一個模式開始似乎是最好的選擇。 無論如何,首要任務是明確定義允許的格式。

@"^(0(?:\.\d+)?|1(?:\.0+)?)$"

01也可以匹配,如果您不想匹配它們,並且點后必須有任何數字,則可以使用

@"^(0\.\d+|1\.0+)$"

下面的代碼是您想要的,當文本框失去焦點時,您需要刪除最后一個dot ,例如str.Trim('.')

private void tb_Surface_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    var patten = @"^(0(\.\d*)?|1(\.0*)?)$";
    Regex regex = new Regex(patten);
    e.Handled = !regex.IsMatch(e.Text);
    // e.Handled = !regex.IsMatch((sender as TextBox).Text.Insert((sender as TextBox).SelectionStart, e.Text));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM