【问题标题】:Validate textbox float input with either . or ,使用任一验证文本框浮点输入。要么 ,
【发布时间】:2020-06-07 16:15:34
【问题描述】:

我尝试只在使用 WPF c# 的文本框中允许十进制输入,但允许单个出现“,”或“。”

我设法使用“。”验证文本框中的浮点输入。与

void NumericTextBoxInput(object sender, TextCompositionEventArgs e)
{
    var regex = new Regex(@"^[0-9]*(?:\.[0-9]*)?$");

    if (regex.IsMatch(e.Text) && !(e.Text == "." && ((TextBox)sender).Text.Contains(e.Text)))
           e.Handled = false;
    else
        e.Handled = true;
}

现在我尝试做同样的事情,包括一个“,”作为十进制标记。以下正则表达式是可以的,但我不能只允许一个“。”或一个“,”,然后禁用两个十进制标记。

var regex = new Regex(@"^[0-9]*(?:(\.|\,)[0-9]*)?$");

有人知道如何只允许“,”或“.”出现一次吗?

【问题讨论】:

  • 听起来像是完全错误的方法(甚至可能是XY problem)。将float.TryParse 与正确的文化一起使用将是我要走的路。
  • 我明白,但我希望文本框允许用户输入点或逗号作为十进制标记,并避免输入 2 个十进制标记而不是一个。

标签: c# wpf textbox


【解决方案1】:

好的,我终于成功了:

private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{

    string input = ((TextBox)sender).Text + e.Text;

    string pattern = "^[0-9]+[.|,]?([0-9]+)?$";

    Regex regex = new Regex(pattern);
    e.Handled = !regex.IsMatch(input);

}

似乎我最初的正则表达式不是正确的。 所以现在,正如预期的那样,我只能输入数字,以及 a 或 a 。但只有一次。 希望这对某人有用。

有关信息,我处理 , 或 .后面的代码:

        if (Regex.IsMatch(myValue, @"(,)"))
        { Double.TryParse(myValue, NumberStyles.Any, CultureInfo.CurrentCulture, out myValued); }
        else { Double.TryParse(myValue, NumberStyles.Any, CultureInfo.InvariantCulture, out myValued); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多