正则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] $”)