为什么此正则表达式表达式返回“ true”?

时间:2019-05-30 10:03:50

标签: c# regex

我正在RegularExpressionValidator中使用此正则表达式,它工作正常。但是,此代码在c#中返回true。您能告诉我我在做什么错吗?

我只检查数字正则表达式

var x = Regex.IsMatch("1234asdf", @"[0-9]+").ToString();

4 个答案:

答案 0 :(得分:3)

因为正在提供的字符串中找到您要查找的内容。 您可以使用^$强制整个字符串对正则表达式进行数学运算:

^[0-9]+$

^匹配字符串的开头$,结尾

请查看此文档的“锚点”部分:Regular Expression Language - Quick Reference

顺便说一句,应该使用[0-9]代替\d

答案 1 :(得分:1)

其他答案则讨论了为什么需要固定您的正则表达式。但是,没有人对您的问题的RegularExpressionValidator部分感兴趣。

我假设您的意思是System.Web.RegularExpressionValidator。 RegularExpressionValidator所做的不仅仅是检查正则表达式是否匹配-还检查正则表达式是否完全匹配。也就是说,它有效地为您添加了^$锚点。

The code

Match m = RegexUtil.Match(controlValue, ValidationExpression, RegexOptions.None, MatchTimeout);
return(m.Success && m.Index == 0 && m.Length == controlValue.Length);

请注意如何检查m.Success,但还要检查匹配是否从要检查的值的开头开始,到结束于要检查的值的结尾为止。

System.ComponentModel.DataAnnotations.RegularExpressionAttribute做同样的事情)。

答案 2 :(得分:0)

您必须使用^和$强制整个字符串与正则表达式模式匹配

^ [0-9] + $

^匹配字符串的开头,$结束

在C#中,使用以下格式编写表达式:

var x = Regex.IsMatch("1234", @"^[0-9]+$").ToString();

答案 3 :(得分:0)

因为您尝试将0到9之间的一位或多位数字匹配,请解释一下:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: xi-{{instanceId}}
  name: deployment-creation
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["batch", "extensions"]
  resources: ["jobs"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

如果您的字符串中有一些数字,请输入以下代码:

[0-9] //Match digit 0-9 you can also use /d-(Match any digit char)
+ //Match one or more of the preceding token

将始终返回True。 例如,如果您尝试此操作:

var x = Regex.IsMatch("1234asdf", @"[0-9]+").ToString();

将返回False

相关问题