在WPF文本框上使用正则表达式验证用户输入

本文关键字:正则表达式 验证 用户 输入 WPF 文本 | 更新日期: 2023-09-27 17:50:40

我有一个输入验证数组。数组的每一行表示一个输入验证;正则表达式检查的字符串和在验证出错时为用户显示的字符串:

public class myClass
{
     public static string[][] inputsInfo = new string[4][];
     static myClass()
     {
     // ID - 9 digits
     inputsInfo[0] = new string[2] { "^[0-9]{9}$", "exactly 9 digits (0-9)" };
     // only letters and possibly more than one word
     inputsInfo[1] = new string[2] { "^[A-Za-z]{2,}(( )[A-Za-z]{2,})*$", "only letters (A-Z) or (a-z)" };
     // Number - unlimited digits
     inputsInfo[2] = new string[2] { "^[0-9]+$", "only digits (0-9)" };
     // username, password
     inputsInfo[3] = new string[2] { "^[A-Za-z0-9]{6,}$", "at least 6 characters.'nOnly letters (A-Z) or (a-z) and digits (0-9) are allowed" };
     }
..............
..............
}

我有包含WPF文本框的窗口。有字段有相同的输入验证,这就是为什么我想保存所有的输入验证在数组中,所以我可以只选择验证我需要的时刻。

我有这样的表单:

...............
        <TextBlock Grid.Row="2" Grid.Column="0" Text="First name"/>
        <TextBox x:Name="firstName" Grid.Row="2" Grid.Column="1"/>
        <Button Grid.Row="2" Grid.Column="2" Content="Search"/>
        <TextBlock Grid.Row="3" Grid.Column="0" Text="Last name"/>
        <TextBox x:Name="lastName" Grid.Row="3" Grid.Column="1"/>
        <Button Grid.Row="3" Grid.Column="2" Content="Search"/>
        <TextBlock Grid.Row="4" Grid.Column="0" Text="ID number"/>
        <TextBox x:Name="ID" Grid.Row="4" Grid.Column="1"/>
        <Button Grid.Row="4" Grid.Column="2" Content="Search"/>
...............

每个文本框都有一个带有Click事件的near按钮。我如何通过单击按钮执行输入验证?

是否有一种方法通过XAML代码做到这一点?或者只在c#代码后面的代码中?

在WPF文本框上使用正则表达式验证用户输入

如何通过单击按钮执行输入验证?

为什么不在ViewModel上创建布尔标志来监视目标文本框的绑定文本属性以进行验证呢?示例

VM:

public string FirstName { get { return _firstName; }
                          set { _firstname = value; 
                                PropertyChanged("IsFirstNameValid");
                                PropertyChanged("FirstName");
                              }
                        }
public bool IsFirstNameValid { get { return Regex.IsMatch( FirstName,
                                                           ValidationPatternFirstName); }}

XAML

<TextBox x:Name="firstName" 
         Text={Binding FirstName, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />

当存储值FirstName发生任何变化时,布尔值IsFirstNameValid将在以后访问时准确地反映该状态。

也可以绑定到屏幕上的IsFirstNameValid来显示图标或不显示图标,它将根据其状态更新。