使用Regex的TextBox筛选器

本文关键字:筛选 TextBox Regex 使用 | 更新日期: 2023-09-27 17:49:44

我很难在TexBox上应用过滤器。我有3种过滤器类型:

1( Only Numbers (positive)示例:123好,-123,ad8,12.0不好

2( Only Numbers plus "^" and "." chars示例:123^3,-34,-34.5良好,ad8,23-4不良

3( Only POSITIVE Numbers plus "^" and "." chars示例:123^3,34.5良好,-34,ad8,23-4不良

这是我的作品:

private void PriceInput_TextChanged(object sender, TextChangedEventArgs e)
        {
            TextBox tb = sender as TextBox;
            switch (FieldType)
            {
                case InputFieldType.TypeQuantity:
                    tb.Text = KeyFilter.ExtractNumbersOnly(tb.Text);
                    break;
                case InputFieldType.TypePositivePrice:
                    tb.Text = KeyFilter.ExtractPositivePricesOnly(tb.Text);
                    break;
                case InputFieldType.TypePrice:
                    tb.Text = KeyFilter.ExtractPricesOnly(tb.Text);
                    break;
            }
        }

和KeyFilter:

public static string ExtractNumbersOnly(string s)
{
    Match match = System.Text.RegularExpressions.Regex.Match(s, "''d+");
    return match.Value;
}
public static string ExtractPricesOnly(string s)
{
    Match match = System.Text.RegularExpressions.Regex.Match(s, "^[-]?''d+([.]''d+)?$");
    return match.Value;
}
public static string ExtractPositivePricesOnly(string s)
{
    Match match = System.Text.RegularExpressions.Regex.Match(s, "^[+]?''d+([.]''d+)?$");
    return match.Value;
}

使用Regex的TextBox筛选器

(1(

^''d+$

(2(

^-?''d+(''.''d+)?(''^)?(-?''d+(''.''d+)?)?$

(3( 实际上比(2(更容易。只需取(2(并去掉负号即可。

^''d+(''.''d+)?(''^''d+(''.''d+)?)?$

所需的三个正则表达式按顺序(如您所问(如下:

^'d+$

^-?'d+[.^]'d+$

^'d+[.^]'d+$

请使用C# 中的转义符转义'

Regex.IsMatch("123", "^''d+$")
Regex.IsMatch("-123^33", "^-?''d+((''^''d+)|(''.''d+))?$")
Regex.IsMatch("123^33", "^''d+((''^''d+)|(''.''d+))?$")

注意,如果^.都包括在内,则第2和第3不起作用,例如123.44^2<-根据给定的RegEx,这不是一个正确的输入