正则表达式 C#

Regular Expressions C#

我知道有很多关于制作正则表达式的问题,但它们似乎都是关于一个单一的问题而不是一般的用法。我也有一个问题想解决。我曾尝试通过阅读正则表达式来学习,但很快就会变得棘手。这是我的问题:

C#

我需要验证存在于同一表单上的两个文本框。我编写的数学运算可以处理任何浮点数。对于这个特定的应用程序,我知道数字将采用三种格式,否则代表用户会出现错误。例如,如果不小心输入了额外的数字或者输入太早等,我想防止这些错误。

格式如下:“#.####”“##.####”“###.##”其中“#”表示必填数字。以一位或两位整数开头的格式必须有 4 个或更多的尾随数字。我已经将它限制在 8,所以我尝试 lol.The 以三位数整数开头的格式永远不允许小数点后有超过两位数。

这是我迄今为止尝试过的方法。

    Regex acceptedInputRegex = new Regex(@"^\b[0-9]{3}.[0-9]{2}|[0-9]{1,2}.[0-9]{4,8}$");

    Regex acceptedInputRegex = new Regex(@"^\b\d{3}.\d{2} | \d{1,2}.\d{4,8}$");

我已经尝试过,认为匹配是我想要实现的,好像与我的否定表达式匹配意味着有问题。我两次尝试都没有成功。这是代码:

    if (acceptedInputRegex.IsMatch(txtMyTextBox1.Text) || acceptedInputRegex.IsMatch(txtMyTextBox2.Text))
            {

            } else
            {
                MessageBox.Show("Numbers are not in the right format", "Invalid Input!");
                return;
            }
  1. 我应该使用正则表达式来解决这个问题吗?
  2. 如果没有,请告诉我你推荐什么。如果是这样,请帮助我更正我的正则表达式。

谢谢。

你很接近,你需要转义点并将备选方案分组,以便 ^$ 锚点可以应用于它们:

@"^(?:\d{3}\.\d{2}|\d{1,2}\.\d{4,8})$"

参见regex demo

详情:

  • ^ - 字符串开头
  • (?: - non-capturing group 匹配两个备选方案之一的开始:
    • \d{3}\.\d{2} - 3 位数字,. 和 2 位数字
    • | - 或
    • \d{1,2}\.\d{4,8} - 1 或 2 位数字,.,4 至 8 位数字
  • ) - 非捕获组结束
  • $ - 字符串结尾。

要使 \d 仅匹配 ASCII 数字,请使用 RegexOptions.ECMAScript 选项:

var isValid = Regex.IsMatch(s, @"^(?:\d{3}\.\d{2}|\d{1,2}\.\d{4,8})$", RegexOptions.ECMAScript);