正则表达式接受部分匹配

时间:2017-08-31 17:11:29

标签: c# asp.net .net regex

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

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.

4 个答案:

答案 0 :(得分:5)

[0-9]*表示出现{0}或更多[0-9]

[0-9]+表示发生一次或多次[0-9]

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

*更改为+

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

答案 1 :(得分:2)

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

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

我通常也为了安全而逃离点,不完全确定它是否必要,但我仍然这样做。 :)

答案 2 :(得分:0)

您可以使用此模式:

^\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

答案 3 :(得分:0)

匹配以句点

分隔的4组数字

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