2

我正在使用 C# 和 .NET,我有一个看起来像这样的正则表达式

"\D"

这匹配所有非数字字符,但我不希望它匹配小数点 (.) 和负号 (-)。我怎样才能用正则表达式做到这一点?

所以我尝试了 Chris' 并对其进行了一些调整以使其工作:

(我有一个名称为“原始”的文本框)

 private void Original_TextChanged(object sender, EventArgs e) {
      Regex regex = new Regex(@"[^\d.-]", RegexOptions.IgnoreCase);
      Match match = regex.Match(Original.Text);
      if (match.Success) {
          Original.Text = regex.Replace(Original.Text, "");
          Original.SelectionStart = Original.TextLength;
      }
  }

Original.SelectionStart = Original.TextLength;是因为每当它被替换时,它都会将选择放在开头,这对用户来说似乎有点奇怪......

4

1 回答 1

5

您可以使用否定字符类来排除数字.、 和-。像这样匹配单个字符的表达式是[^\d\.\-]. 插入符号表示该类被否定。

Regex.IsMatch("a f", @"^[^\d\.\-]+$"); // true
Regex.IsMatch("a_f", @"^[^\d\.\-]+$"); // true
Regex.IsMatch("a.f", @"^[^\d\.\-]+$"); // false
Regex.IsMatch("af-", @"^[^\d\.\-]+$"); // false
Regex.IsMatch("-42", @"^[^\d\.\-]+$"); // false
Regex.IsMatch("4.2", @"^[^\d\.\-]+$"); // false
于 2011-04-21T22:42:38.907 回答