我根本没用过正则表达式,所以在故障排除方面遇到了困难。我想正则表达式匹配仅当包含的字符串是所有数字;但是在下面两个例子中,它匹配的是一个包含所有数字加上等号的字符串,比如“1234=4321”。我确信有一种方法可以改变这种行为,但正如我所说的,我从来没有真正使用过正则表达式。

string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");

if (regex.IsMatch(compare))
{ 
    //true
}

regex = new Regex("[0-9]");

if (regex.IsMatch(compare))
{ 
    //true
}

以防万一,我使用的是c#和。net 2.0。


当前回答

^\d+$,在英语中是“字符串的开始”,“1个或多个数字”,“字符串的结束”。

其他回答

你的正则表达式将匹配任何包含数字的东西,你想使用锚来匹配整个字符串,然后匹配一个或多个数字:

regex = new Regex("^[0-9]+$");

^将锚定字符串的开头,$将锚定字符串的结尾,+将匹配它前面的一个或多个字符(在本例中为数字)。

如果你需要容忍小数点和千位标记

var regex = new Regex(@"^-?[0-9][0-9,\.]+$");

如果数字可以变成负数,你需要一个“-”。

下面是我的工作:

^(-?[1-9]+\\d*([.]\\d+)?)$|^(-?0[.]\\d*[1-9]+)$|^0$

还有一些测试

积极的测试:

string []goodNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};

负面测试:

string []badNums={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};

不仅检查了c#,还检查了Java、Javascript和PHP

这适用于整数和十进制数。如果数字有昏迷千分隔符,它就不匹配,

"^-?\\d*(\\.\\d+)?$"

与此匹配的字符串:

894
923.21
76876876
.32
-894
-923.21
-76876876
-.32

一些字符串没有:

hello
9bye
hello9bye
888,323
5,434.3
-8,336.09
87078.

它是匹配的,因为它找到的是“匹配”,而不是完整字符串的匹配。您可以通过更改regexp来解决这个问题,以便专门查找字符串的开头和结尾。

^\d+$