c# - 正则表达式 C#

标签 c# regex validation regex-negation

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

C#

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

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

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

    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. 如果没有,请告诉我您的建议。如果是这样,请帮助我更正我的正则表达式。

谢谢。

最佳答案

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

@"^(?:\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);

关于c# - 正则表达式 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45348666/

相关文章:

java - 如果多个字符可以包含数字和下划线(最多 128 个),则正则表达式的第一个字符必须是字母

javascript - 正则表达式以获取所有带有可选下一个字符或字符串结尾的事件

json - Node JS Joi 验证 - 如何返回 JSON 响应而不是字符串?

c# - 获取从 dapper .QueryMultiple 方法返回的结果集/表的数量

C#:IFormattable、IFormatProvider 和 ICustomFormatter 之间的连接,以及何时使用什么

javascript - 在较大的字符串中查找包含给定字母集的最小子字符串

javascript - 根据文化格式使用 Moment.js 验证日期

java - Hibernate - 激活 Bean 验证集成时出错

c# - iTextSharp 第一页文字更高

c# - 如何在 .NET C# 3.5 中循环访问 "set"枚举