我根本没有使用正则表达式,所以我很难排除故障.我希望正则表达式只在包含的字符串是所有数字时匹配; 但是下面的两个例子是匹配一个包含所有数字的字符串加上一个等号"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#和.NET2.0.
使用开始和结束锚点.
Regex regex = new Regex(@"^\d$");
使用"^\d+$"
,如果你需要匹配一个以上的数字.
请注意,"\d"
将匹配[0-9]
和其他数字字符,如东部阿拉伯数字??????????
.用于"^[0-9]+$"
将匹配限制为仅阿拉伯数字0 - 9.
如果你需要包括除数字之外的任何数字表示(如初学者的十进制值),那么请参阅@tchrist的全面指南,用正则表达式解析数字.
您的正则表达式将匹配包含数字的任何内容,您希望使用锚点来匹配整个字符串,然后匹配一个或多个数字:
regex = new Regex("^[0-9]+$");
在^
将锚定字符串的开始,$
将锚定字符串的结尾,而+
将匹配一个或多个(在这种情况下的数字)什么它之前.
如果你需要容忍小数点和千标记
var regex = new Regex(@"^-?[0-9][0-9,\.]+$");
如果数字可以为负数,则需要" - ".
它是匹配的,因为它找到"匹配"而不是完整字符串的匹配.您可以通过更改正则表达式来专门查找字符串的开头和结尾来解决此问题.
^\d+$
也许我的方法会帮助你.
public static bool IsNumber(string s) { return s.All(char.IsDigit); }
这适用于整数和十进制数.如果数字具有彗差千分隔符,则不匹配,
"^-?\\d*(\\.\\d+)?$"
一些与此匹配的字符串:
894 923.21 76876876 .32 -894 -923.21 -76876876 -.32
一些没有的字符串:
hello 9bye hello9bye 888,323 5,434.3 -8,336.09 87078.
^\d + $,这是"字符串的开头","1位或更多位","字符串的结尾",英文.
如果你需要检查所有数字是否都是数字(0-9),
^[0-9]+$
1425是的
0142是的
0是的
1是的
154a25否则
1234 = 3254假
这是我的工作:
^(-?[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
抱歉丑陋的格式化.对于任意数量的数字:
[0-9]*
对于一个或多个数字:
[0-9]+
虽然上述解决方案都不适合我的目的,但是这对我有用。
var pattern = @"^(-?[1-9]+\d*([.]\d+)?)$|^(-?0[.]\d*[1-9]+)$|^0$|^0.0$"; return Regex.Match(value, pattern, RegexOptions.IgnoreCase).Success;
有效值的示例:“ 3”,“-3”,“ 0”,“ 0.0”,“ 1.0”,“ 0.7”,“ 690.7”,“ 0.0001”,“-555”,“ 945465464654”
无效值的示例:“ a”,“”,“”,“。”,“-”,“ 001”,“ 00.2”,“ 000.5”,“。3”,“ 3。”,“-1” ,“-1”,“-。1”,“-0”,“ 00099”,“ 099”