正则表达式,带逗号和点的双精度值

void RandomRegex(object sender,TextCompositionEventArgs e)
{
    var regex = new Regex("^[0-9]*$");
    if (regex.IsMatch(e.Text) && !(e.Text == "," && ((TextBox)sender).Text.Contains(e.Text)))
    {
        e.Handled = false;
    }
    else
    {
        e.Handled = true;
    }
}

如何更改它也接受0.5这样的点-> 0.5

编辑:我使用此正则表达式来避免在文本框中输入字母,例如高度。

jideyouwo 回答:正则表达式,带逗号和点的双精度值

我认为"[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

大家都在问