我有一段C#代码,可以将文本框字段验证为正数字
Regex isPositiveInt = new Regex("[^0-9]");
return !isPositiveInt.IsMatch(textbox1.Text)
我发现如果正则表达式匹配,它给出“假”,当它不匹配时,它给出“真”。所以我要添加一个“!”到返回值。这没有问题,但我觉得这是违反直觉的。有人可以解释为什么它会返回相反的结果吗?
答案 0 :(得分:7)
^
元字符在正则表达式中有两个含义 - 在单独使用时标记字符串的开头,并作为[^...]
模式的一部分,意思是“不匹配任何一个[...]
块中的字符“。我想也许你想要^[0-9]
,它将匹配任何以数字开头的字符串。它不会确保整个字符串是数字的,因为它只检查第一个字符,之后可能会发生任何事情。
如果你想确保你的字符串是数字的,那么只需要^\d+$
即可。 \d
与[0-9]
相同但更易于阅读,^
和$
分别标记字符串的开头和结尾。
答案 1 :(得分:5)
[^0-9]
将匹配不数字的单字符。
这是你想要的吗?
您确定不代表\d+
吗?
你认为它是反向的,因为如果你只测试正数和负数,你将使用的唯一非数字字符将是“ - ”(负号)。所以它会匹配负号,因为它不是数字。因此,您会发现您的代码正好相反。
E.g。 “-987”(true:匹配负号),“123”(false:未找到非数字字符)
因此,事实是:您的代码不反向工作。你的代码错了,做错了。只是你的输入是看起来像它正在反向工作。
答案 2 :(得分:2)
您的正则表达式是负集,因此它将匹配不数字的字符串中的单个字符。
结果示例:
"" false
"0" false
"1" false
"x" true
"42x" true
您可以使用它来捕获输入中的非法字符,但正如您所见,您无法使用它来区分空输入和数字输入。
要仅匹配数字,您将匹配字符串的开头和结尾(使用^
和$
),并且至少有一位数字:
Regex isNonNegativeInteger = new Regex(@"^\d+$");
要匹配一个正整数(我不确定你真正想要的那个),你必须确保该值不为零。这将匹配其中一个数字不为零的数字:
Regex isPositiveInteger = new Regex(@"^\d*[1-9]\d*$");
答案 3 :(得分:1)
正则表达式字符类中的^
表示:不在0
到9
的集合中。要匹配您想要的正整数:
[0-9]+
表示0到9的一个或多个字符。
注意:这也将匹配0,严格来说,它不是正整数。该表达式实际上匹配非负整数。
答案 4 :(得分:0)
的真正答案
没有问题,但我觉得这是违反直觉的。有人可以解释为什么它会返回相反的结果吗?
确实是:它没有。看两次:)
另一方面:你的直觉仍然正常。你可以学会信任它。
对不起,如果这看起来有点迂腐,但它没有明确说明,我认为在某种程度上它应该是公认的答案。 我们试着回答这个问题。由于其他人在此之外已经有很多帮助,我不必重复这些信息:)
答案 5 :(得分:0)
我认为下面将填写您正在寻找的内容
这将检查没有小数的整数
\ A([0-9] *)\Ž
这甚至会识别十进制
\ A([0-9]的)\Ž| \ A(\ d (\ d)*)\Ž