我一直花费数小时来处理这个问题,到处寻找......我的问题很简单:我们想检查一下用户输入了一个好号码.它可以是整数或小数,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来完成这项工作,但我不能......
你需要锚定表达式:
Regex decimalRegex = new Regex(@"^\d+(,\d+)?$");
Run Code Online (Sandbox Code Playgroud)
如果没有^在开头和$结尾,表达式将被允许匹配您正在测试的字符串的任何子字符串.锚点一起禁止子串匹配.
换句话说,您的原始表达式将匹配包含至少一个数字的任何字符串.
为什么不在设置正确的文化后使用Int32.TryParse()或Double.TryParse()?在你的问题中,你已经说过一个Int或一个Double,但后面说了一个'逗号后的无限数字'.这些可能不是Ints或Doubles,具体取决于它们的范围,TryParse也会为您进行范围检查......
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |