我认为"[0-9,\\.]+"
可以在这里工作。
var pattern = "[0-9,\\.]+";
foreach( var test in new [] {"0,5","0.5","","abc"})
Console.WriteLine($"{test}: {Regex.IsMatch(test,pattern)}");
0,5: True
0.5: True
: False
abc: False
正如其他人指出的那样,您可以使数字解析更好。
您可以:
- (可能是首选)使用用户的文化;或
- 相反,使数字解析更具弹性。
foreach (var test in new[] { "0.5","0,"2019,11","2,019.11","abc" })
{
var frenchR = decimal.TryParse(test,NumberStyles.AllowThousands|NumberStyles.AllowDecimalPoint,new CultureInfo("fr-FR"),out var dec );
bool? invariantR = null;
if( !frenchR )
invariantR = decimal.TryParse(test,CultureInfo.InvariantCulture,out dec );
//var dec2 = decimal.Parse(test,CultureInfo.InvariantCulture);
Console.WriteLine($"{test,10} => {dec,10} (french={frenchR},invariant={(invariantR?.ToString()??"not attempted")})");
}
0.5 => 0.5 (french=False,invariant=True)
0,5 => 0.5 (french=True,invariant=not attempted)
2019,11 => 2019.11 (french=True,invariant=not attempted)
2,019.11 => 2019.11 (french=False,invariant=True)
abc => 0 (french=False,invariant=False)
本文链接:https://www.f2er.com/3160557.html