当前位置:  开发笔记 > 编程语言 > 正文

正则表达式仅限数字

如何解决《正则表达式仅限数字》经验,为你挑选了11个好方法。

我根本没有使用正则表达式,所以我很难排除故障.我希望正则表达式只在包含的字符串是所有数字时匹配; 但是下面的两个例子是匹配一个包含所有数字的字符串加上一个等号"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.



1> Bill the Liz..:

使用开始和结束锚点.

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

使用"^\d+$",如果你需要匹配一个以上的数字.


请注意,"\d"将匹配[0-9]和其他数字字符,如东部阿拉伯数字??????????.用于"^[0-9]+$"将匹配限制为仅阿拉伯数字0 - 9.


如果你需要包括除数字之外的任何数字表示(如初学者的十进制值),那么请参阅@tchrist的全面指南,用正则表达式解析数字.


@Najeeb是的,因为印度邮政编码是6位数字,你可以使用类似`"^\d {6} $"的东西.其他一些国家/地区的邮政编码规则也比较复杂,因此多个国家/地区的正则表达式解决方案也会变得非常复杂.查看/sf/ask/17360801/上的一些示例

2> Robert Gambl..:

您的正则表达式将匹配包含数字的任何内容,您希望使用锚点来匹配整个字符串,然后匹配一个或多个数字:

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

^将锚定字符串的开始,$将锚定字符串的结尾,而+将匹配一个或多个(在这种情况下的数字)什么它之前.



3> Andy..:

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

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

如果数字可以为负数,则需要" - ".


你可以通过`?`选择`-`和`.`.` - ?\ d +(?:\.\ d +)?`匹配整数或小数.(p?中的`?:`只是使parens成为非捕获组,并且为了清晰起见仅用于分组.)
这个正则表达式也错误地允许前导负号(`-`)和句点(`.`)不止一次出现.
对于像1..5这样的边缘情况,它会失败,但是如果您对此进行监督。对于-2这样的基本情况,它仍然失败。请将其更改为`^-?[0-9] [0-9,\。] * $`,以免出现基本情况。+替换为*

4> kasperjj..:

它是匹配的,因为它找到"匹配"而不是完整字符串的匹配.您可以通过更改正则表达式来专门查找字符串的开头和结尾来解决此问题.

^\d+$



5> Raz Megrelid..:

也许我的方法会帮助你.

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


请记住,[`Char.IsDigit`](http://msdn.microsoft.com/en-us/library/0t641e58%28v=vs.110%29.aspx)对于任何字符都返回"true" [UnicodeCategory.DecimalDigitNumber](http://msdn.microsoft.com/en-us/library/system.globalization.unicodecategory(v = vs.110).aspx)类别的成员.这可能不是OP想要的.另请参阅[为什么Char.IsDigit对于无法解析为int的字符返回true?](http://stackoverflow.com/q/22063436/1497596).

6> ultraklon..:

这适用于整数和十进制数.如果数字具有彗差千分隔符,则不匹配,

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

一些与此匹配的字符串:

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

一些没有的字符串:

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



7> Mark Bracket..:

^\d + $,这是"字符串的开头","1位或更多位","字符串的结尾",英文.



8> 小智..:

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

^[0-9]+$

1425是的

0142是的

0是的

1是的

154a25否则

1234 = 3254假



9> Marina K...:

这是我的工作:

^(-?[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



10> fnc12..:

抱歉丑陋的格式化.对于任意数量的数字:

[0-9]*

对于一个或多个数字:

[0-9]+



11> Daniele D...:

虽然上述解决方案都不适合我的目的,但是这对我有用。

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”

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有