C#正则表达式为法语小数

Kit*_*Kat 2 .net c# regex

我一直花费数小时来处理这个问题,到处寻找......我的问题很简单:我们想检查一下用户输入了一个好号码.它可以是整数或小数,comas不是点,而是昏迷后的无限数.

我试过这个

 Regex decimalRegex = new Regex(@"\d+(,\d+)?");
Run Code Online (Sandbox Code Playgroud)

我认为这样可以,但是例如:如果我尝试使用IsMatch,则2,324e是真的.此外它在点和昏迷之间没有区别所以这个2.23可以用我的正则表达式的IsMatch.

但是我想要允许这个例如2号:

2
2,2
2,3243241428483248
31324,232332 (infinite numbers before and after)
Run Code Online (Sandbox Code Playgroud)

并禁止:

2.2
2,2434214e (any letter)
Run Code Online (Sandbox Code Playgroud)

并且理想地禁止(我认为?会做到这一点,但事实并非如此)......

2,2,2 or
2.2.2
Run Code Online (Sandbox Code Playgroud)

只允许一个昏迷......否则我就是法国文化

正则表达式中的任何冠军会有什么建议吗?我甚至下载了Expresso来完成这项工作,但我不能......

cdh*_*wie 9

你需要锚定表达式:

Regex decimalRegex = new Regex(@"^\d+(,\d+)?$");
Run Code Online (Sandbox Code Playgroud)

如果没有^在开头和$结尾,表达式将被允许匹配您正在测试的字符串的任何子字符串.锚点一起禁止子串匹配.

换句话说,您的原始表达式将匹配包含至少一个数字的任何字符串.


Ian*_*Ian 5

为什么不在设置正确的文化后使用Int32.TryParse()或Double.TryParse()?在你的问题中,你已经说过一个Int或一个Double,但后面说了一个'逗号后的无限数字'.这些可能不是Ints或Doubles,具体取决于它们的范围,TryParse也会为您进行范围检查......