首页 > 解决方案 > WPF 中的正则表达式

问题描述

我知道已经有一些帖子试图解释 RegEx 字符串。但我还是不明白。就我而言,我需要一个 WPF 的正则表达式,它只允许“数字键盘”。它在代码中:

private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
  Regex regex = new Regex("[-+]?[0-9]*,?[0-9]*");
  e.Handled = regex.IsMatch(e.Text);
}

所以这里有一些示例数字,我需要允许:“1”或“-1”或“-0,5”或“4,00”或“-3,56”或“3,3”或

" '-2, ' 为 '-2,0' 或 '-2' "

(所以它都在 -4 到 +4 之间。可以有一个逗号,但不是必须的。如果有逗号,它后面需要一个或 2 个数字 - 不多。它也应该是一个“,”不是“。” - 这很重要)有人知道如何编写这个正则表达式字符串吗?谢谢

标签: c#regex

解决方案


分解它,你所追求的并不那么复杂。

首先,您的最大/最小范围是从 -4 到 4。考虑到小数部分,您可以拥有以下内容:^[+-]?4(,0{1,2})?$. 所以在这里,我们期望 a+或 a -(可选),数字 4,可选地后跟一个逗号和一个或两个 0。

在您的情况下,我们现在需要匹配您范围的中间值,即从 -3.99 到 3.99。这可以通过以下方式实现:^[+-]?[0-3](,\d{1,2})?$. 在这种情况下,我们还期望 a+或 a -(可选)。然后我们期望匹配一个介于 0 和 3 之间的数字,可选地后跟逗号和 1 或 2 位数字。

将它们结合起来,我们最终会得到这样的结果:^[+-]?((4(,0{1,2})?)|([0-3](,\d{1,2})?))$. 此处提供示例。

编辑:根据评论,您需要转义. 最简单的方法是使用字符,以便 C# 编译器将字符串威胁为文字:.\d\d\n\t@Regex regex = new Regex(@"^[+-]?((4(,0{1,2})?)|([0-3](,\d{1,2})?))$");


推荐阅读