Regex
是一个强大的工具,可让您检查是否符合给定的面罩。
从该版本开始, .NET 7.0
引入了对源生成器 RegexGenerator的支持- 我在代码中使用它。
为了深入了解上下文,我们来验证的电话号码PhoneNumberTextBox
。
例如,如果给出以下内容Regex
:
/// <summary>
/// <see cref="Regex"/>, которому соответствует только формат "+7 (XXX) XXX-XX-XX"
/// </summary>
/// <returns>Соответствие маске номера телефона</returns>
[GeneratedRegex(@"^\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}$")]
private static partial Regex PhoneNumberOnlyRegex();
以及验证方法如下:
/// <summary>
/// Метод, проверяющий соответствие текста заданному <see cref="Regex"/>
/// </summary>
/// <param name="Text">Проверяемый текст</param>
/// <param name="Regex">Проверяющий <see cref="Regex"/></param>
/// <returns>Значение <see cref="bool"/> соответствия текста маске</returns>
private static bool IsTextAllowed(string Text, Regex Regex)
{
return Regex.IsMatch(Text);
}
然后我们可以像这样使用这个方法:
if (!IsTextAllowed(PhoneNumberTextBox.Text, PhoneNumberOnlyRegex()))
{
PhoneNumberTextBox.BorderBrush = Brushes.Red;
}
这种方法一直有效,直到我们必须检查输入序列而不是整个字符串的正确性。这就是问题出现的时候。
例如:
线路+ 7 (000) 000-00-00
将接通Regex
,但是如果您需要检查用户拨打的电话号码是否正确怎么办?他一拨通+
, Regex
就会开始咒骂。
在某些情况下这可能看起来是一个小问题,但是如果开发者需要控制用户输入的每个字符,UI
防止用户输入错误的字符怎么办?例如,通过事件PreviewTextInput
和 Pasting
元素TextBox
?
顺便说一句,该事件还出现了另一个问题PreviewTextInput
:它不处理用户输入的空格,而仅对输入的字符做出反应。这种情况该怎么办?