正则expression式仅用于数字

我没有使用正则expression式,所以我有困难的故障排除。 我只想要包含的string是所有数字匹配的正则expression式; 但是下面的两个例子匹配一个包含所有数字的string加上一个等号“1234 = 4321”。 我相信有一种方法可以改变这种行为,但正如我所说,我从来没有用正则expression式做过很多事情。

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的用正则expression式parsing数字的全面指南 。

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

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

^将锚定string的开头, $将锚定string的结尾,而+将匹配一个或多个之前的内容(在这种情况下是一个数字)。

如果你需要忍受小数点和千分号…

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

更新:如果数字可以为负值,则需要“ – ”。 更新:移动“ – ”到开始避免匹配非起始“ – ”

它是匹配的,因为它发现“匹配”不是完整string的匹配。 您可以通过更改您的正则expression式来解决这个问题,以专门查找string的开头和结尾。

 ^\d+$ 

^ \ d + $,这是英文中的“string的开始”,“1个或多个数字”,“string的结尾”。

也许我的方法会帮助你。

  public static bool IsNumber(string s) { return s.All(char.IsDigit); } 

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

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

一些与此匹配的string:

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

有些string不会:

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

对不起格式丑陋。 对于任何数字的数字:

 [0-9]* 

对于一个或多个数字:

 [0-9]+ 

这是我的工作之一:

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

还有一些testing

肯定的testing:

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

负面testing:

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

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

如果你需要检查所有的数字是否是数字(0-9)或不是,

 ^[0-9]+$ 

1425真

0142是

0 TRUE

1真

154a25错误

1234 = 3254错误

另一种方式:如果你喜欢匹配国际号码,如波斯语或阿拉伯语,那么你可以使用下面的expression式:

 Regex = new Regex(@"^[\p{N}]+$"); 

要匹配文字周期字符的使用:

 Regex = new Regex(@"^[\p{N}\.]+$"); 

使用开始和结束锚点。

  Regex regex = new Regex(@"^\d$"); Use "^\d+$" if you need to match more than one digit. 

虽然上述解决scheme的非适合我的目的,这对我工作。

 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”,“ – ”,“00099”,“099”

如果你只想从string中提取数字,模式“\ d +”应该有帮助。

整数和浮点数的正则expression式:

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

一个数字可以以一个句点开头(没有前导数字),一个数字可以以一个句点结尾(没有尾数字)。 以上正则expression式将认识到这两个正确的数字。 一个 。 (期间)本身没有任何数字是不正确的数字。 这就是为什么我们需要两个正则expression式部分(用“|”分隔)。

希望这可以帮助。

我认为这是最简单的一个,它接受欧洲和美国的书写方式,例如美国10,555.12欧洲10.555,12这个也不允许多个逗号或点,例如10..22或10,22除了这个数字,如.55或55,将通过。 这可能是方便的。

 ^([,|.]?[0-9])+$ 

正则expression式regex = new Regex(“^ [0-9] {1,4} = [0-9] {1,4] $”)