C# 使用正则表达式控制用户输入的WPF自定义文本框
我的目标是编写/扩展一个WPF文本框,通过输入一些无效字符来限制用户。所以允许的字符将是正则表达式 以下是我所做的:C# 使用正则表达式控制用户输入的WPF自定义文本框,c#,regex,wpf-controls,prism-5,C#,Regex,Wpf Controls,Prism 5,我的目标是编写/扩展一个WPF文本框,通过输入一些无效字符来限制用户。所以允许的字符将是正则表达式 以下是我所做的: public class MyTextBox : TextBox { static MyTextBox() { DefaultStyleKeyProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata(typeof(MyTextBox)))
public class MyTextBox : TextBox
{
static MyTextBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyTextBox),
new FrameworkPropertyMetadata(typeof(MyTextBox)));
TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata(new PropertyChangedCallback(TextPropertyChanged)));
}
public MyTextBox()
{
PreviewTextInput +=MyTextBox_PreviewTextInput;
}
void MyTextBox_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
var tb = sender as MyTextBox;
if (tb == null) return;
if (IsMasking(tb) && !Regex.IsMatch(e.Text, Mask))
{
e.Handled = true;
}
}
private static bool IsMasking(MyTextBox tb)
{
if (string.IsNullOrWhiteSpace(tb.Mask)) return false;
try
{
new Regex(tb.Mask);
}
catch (Exception)
{
return false;
}
return true;
}
#region Mask Dependancy property
public string Mask
{
get { return (string)GetValue(MaskProperty); }
set { SetValue(MaskProperty, value); }
}
// Using a DependencyProperty as the backing store for Mask. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MaskProperty =
DependencyProperty.Register("Mask", typeof(string), typeof(MyTextBox), new PropertyMetadata(string.Empty));
#endregion
}
用法:
<ctrlLib:MyTextBox Watermark="Test WM" Width="350" Margin="20"
Mask="^[A-Z][0-9]{2}$"
PreviewTextInput="UIElement_OnPreviewTextInput"/>
所以我只允许alpha后跟两个整数。我的控件甚至不接受任何字符作为输入
我做错了什么或如何修复?
我猜,因为正则表达式是用于整个字符串的,所以在单个字符中键入并不起作用 这应该能奏效
^[A-Za-z]*\d\d$
你很接近,你只需要在[a-Z]之后开始
我使它不区分大小写,并使用\d作为[0-9]的缩写。否:不起作用。我想这与Regext本身有关,因为它不是一个完整的字符串。。。它响了吗?嗯。。你能试试^aa$作为图案吗?现在它应该只接受aa(之前和之后都不允许)。