繁体   English   中英

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

[英]C# Regex for a french decimal

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

我试过这个

 Regex decimalRegex = new Regex(@"\d+(,\d+)?");

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

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

2
2,2
2,3243241428483248
31324,232332 (infinite numbers before and after)

并禁止:

2.2
2,2434214e (any letter)

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

2,2,2 or
2.2.2

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

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

你需要锚定表达式:

Regex decimalRegex = new Regex(@"^\d+(,\d+)?$");

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

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

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

你几乎走在正确的轨道上; 你需要的正则表达式是@"^(\\d+(,\\d*)?|,\\d+)$" ^$强制正则表达式匹配字符串的开头和结尾,所以不允许任何额外的。 如果没有这些,你的正则表达式将在1,2e匹配1,2 ,并认为这是正常的 - 这也是为什么2,2,2正在工作,因为它匹配前2,2和忽略其余。 这就是为什么2.2.2匹配 - 正则表达式匹配2 ,并忽略其余部分。 基本上,锚点非常有用:-)我改变的另一件事是添加一个,\\d+子句,它允许你匹配表单的数字,123 如果您不想这样,请将其取出( @"^\\d+(,\\d*)?$" )。 同样,如果您不想匹配123,则将*更改为+@"^\\d+(,\\d+)?$" )。

如果您对其他解决方案持开放态度,您可以采用Ian的建议并使用现有功能; 我也建议用[.,]替换,以便人们可以输入1,21.2 ,因为这不会对任何事情造成任何伤害,但会让一些人的生活更轻松。 (除非你真的担心成千上万的分隔符,或者有一些深刻的理由不想要第二个。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM