正则表达式仅用于数字

我根本没用过正则表达式,所以在故障排除方面遇到了困难。我想正则表达式匹配仅当包含的字符串是所有数字;但是在下面两个例子中,它匹配的是一个包含所有数字加上等号的字符串,比如“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。

1200724 次浏览

使用开始锚和结束锚。

Regex regex = new Regex(@"^\d$");

如果需要匹配多个数字,请使用"^\d+$"


注意,"\d"将匹配[0-9]和其他数字字符,如东部阿拉伯数字٠١٢٣٤٥٦٧٨٩。使用"^[0-9]+$"将匹配限制为阿拉伯数字0 - 9。


如果你需要包含除数字以外的任何数字表示形式(比如初学者的十进制值),那么请参阅@tchrist用正则表达式解析数字的综合指南

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

^\d+$

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

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

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

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

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

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

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

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

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

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

要匹配文字句点字符使用:

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

也许我的方法对你有帮助。

    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.

抱歉格式很难看。 对于任意位数:

[0-9]*

对于一个或多个数字:

[0-9]+

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

^[0-9]+$

匹配

1425
0142
0
1

不匹配

154a25
1234=3254

Regex Regex =新的正则表达式(" ^[0 - 9]{1 4}=[0 - 9]{1,4]美元”)

下面是我的工作:

^(-?[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+$|^[+-]?\d+(\.\d*)?$

数字可以以句号开头(不带前导数字s), 数字可以以句号结尾(后面没有数字)。 以上正则表达式将两者识别为正确的数字 < p >。(句号)本身没有任何数字不是正确的数字。 这就是为什么我们需要两个正则表达式部分(用“|”分隔)

希望这能有所帮助。

使用开始锚和结束锚。

 Regex regex = new Regex(@"^\d$");

如果需要匹配多个数字,请使用"^\d+$"

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

^([,|.]?[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"
 console.log(/^(0|[1-9][0-9]*)$/.test(3000)) // true

下面的正则表达式只接受英语和阿拉伯语(波斯语)语言中的数字(也是浮点数)(就像Windows计算器一样):

^((([0\u0660\u06F0]|([1-9\u0661-\u0669\u06F1-\u06F9][0\u0660\u06F0]*?)+)(\.)[0-9\u0660-\u0669\u06F0-\u06F9]+)|(([0\u0660\u06F0]?|([1-9\u0661-\u0669\u06F1-\u06F9][0\u0660\u06F0]*?)+))|\b)$

上面的正则表达式接受以下模式:

11
1.2
0.3
۱۲
۱.۳
۰.۲
۲.۷

上述正则表达式不接受以下模式:

3.
.3
0..3
.۱۲

检查字符串是否为uint, ulong或只包含数字1 .(点)和数字 样例输入< / p >

Regex rx = new Regex(@"^([1-9]\d*(\.)\d*|0?(\.)\d*[1-9]\d*|[1-9]\d*)$");
string text = "12.0";
var result = rx.IsMatch(text);
Console.WriteLine(result);

样品

123 => True
123.1 => True
0.123 => True
.123 => True
0.2 => True
3452.434.43=> False
2342f43.34 => False
svasad.324 => False
3215.afa => False