使用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;
}
(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,这不是一个正确的输入