正则表达式C#

时间:2017-07-27 10:50:55

标签: c# regex validation regex-negation

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

C#

我需要验证同一表单上存在的两个文本框。我编码的数学运算可以处理任何浮点数。对于这个特定的应用程序,我知道数字将处于三种格式或代表用户有错误。如果一个额外的号码被意外输入或者输入过早等等,我想在例子中防止这些错误。

以下是格式:"#。####" " ## ####&#34。 " ### ##&#34。 "#"代表强制数字。以一位或两位数整数开头的格式必须有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. 如果没有,请告诉我你的推荐。如果是这样,请帮我纠正我的正则表达式。
  3. 感谢。

1 个答案:

答案 0 :(得分:4)

你很接近,你需要逃避点并对备选方案进行分组,以便^$锚点可以应用于它们:

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