【问题标题】:Regular expression accepts partial match [duplicate]正则表达式接受部分匹配[重复]
【发布时间】:2017-08-31 17:11:28
【问题描述】:

我有一些验证代码可以根据正则表达式检查字符串。

Regex regex = new Regex(RegexPattern);
if (!regex.IsMatch(value))
{
    errorMessage = "The data is not in the correct format.";
    return false;
}

如果我将正则表达式模式设置为^[0-9]*.[0-9]*.[0-9]*.[0-9]*$,它会正确接受1.0.0.0;但是,它也接受1.0.0.

如何修改模式以使1.0.0.0 被接受但1.0.0. 被拒绝?

【问题讨论】:

    标签: c# asp.net .net regex


    【解决方案1】:

    [0-9]* 表示 [0-9] 出现 0 次或多次

    [0-9]+ 表示 [0-9] 出现 1 次或多次

    ^[0-9]*.[0-9]*.[0-9]*.[0-9]*$
    

    * 更改为+

    ^[0-9]+.[0-9]+.[0-9]+.[0-9]+$
    

    【讨论】:

    • 是的,这就是我所缺少的。谢谢。
    • 发生这种情况,你已经做了 100 多次。你犯了一个简单而愚蠢的错误,有趣的是你没有找到它。我经常这样做;)。很高兴能帮上忙。
    • 这应该匹配1234567
    • @sln 不。因为必须有 3 个点分隔的数字
    • ^[0-9]+.[0-9]+.[0-9]+.[0-9]+$ 匹配 1234567
    【解决方案2】:

    只是对 * 和 + 有一点误解。前者接受不出现或多次出现 (>=0),后者仅在此类词汇至少出现一次 (>=1) 时才匹配。

    ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$
    

    为了安全起见,我通常也会避开圆点,但不完全确定是否有必要,但我仍然这样做。 :)

    【讨论】:

      【解决方案3】:

      你可以使用这个模式:

      ^\d+\.\d+\.\d+\.\d+$
      

      说明:

       ^ - begin of string
         \d - any digit
         + - at least one char
         \. - exactly a dot char
       $ - end of string
      

      顺便说一句,您的输入看起来像一个 IP 地址。如果是这样,您可以像这样修改您的reges:

      ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
      

      {1,3} 表示:“从 1 到 3 个字符”

      演示: regex101

      【讨论】:

        【解决方案4】:

        匹配由句点分隔的4组数字

        ^\d+(?:\.\d+){3}$

        【讨论】:

          猜你喜欢
          • 2013-07-20
          • 1970-01-01
          • 2011-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-12
          • 2017-11-29
          • 2017-06-23
          相关资源
          最近更新 更多