不允许在正则表达式中使用空格

本文关键字:空格 正则表达式 不允许 | 更新日期: 2023-09-27 18:35:47

我有这个代码:

    private static bool IsTextAllowed(string text)
    {
        Regex regex = new Regex("[^0-9]+"); // Regex that matches disallowed text
        return !regex.IsMatch(text);
    }
    private void TextboxClientID_PreviewTextInput(object sender, TextCompositionEventArgs e)
    {
        e.Handled = !IsTextAllowed(e.Text);
    }

这允许文本框中有空格,如何防止也插入空格?

不允许在正则表达式中使用空格

在正则表达式中,'s修饰符转换为 ['r'n't'f ] ,这意味着没有newline字符,没有tab字符,没有form feed字符(打印机用来开始新页面),也没有spaces

所以你可以使用正则表达式[^''s](你必须使用''才能制作一个',然后最终转换为's。如果您只使用 's ,它将转换为 s 字符文字。

开头和结尾^$字符分别与字符串的开头和结尾匹配。

因此,您可以使用正则表达式^[^0-9''s]+$。以下是它的功能的细分:

  • 第一个^与字符串的开头匹配。
  • 接下来,我们将组封闭在 [] 中,这将匹配该组中的任何单个字符
  • []里面,我们有^0-9''s
    • ^字符确保[]内没有单个字符匹配(将其从任何单个字符切换到没有单个字符),以下都不应为真
    • 0-9部分匹配 0 到 9 之间的任何数字
    • ''s部分创造了字面上的's. 's匹配任何空格字符
  • +匹配 1 到无限次之间的封闭[]
  • 最后的$与字符串的末尾匹配

您的代码可以是:

private static bool IsTextAllowed(string text){
    Regex regex = new Regex("^[^0-9''s]+$");
    return !regex.IsMatch(text);
}

这是一个正则表达式101测试:https://regex101.com/r/aS9xT0

^[^0-9 ]+$

试试这个。这将根本不允许空格。

*不是正则表达式答案,我对空格字符有同样的问题

我通过在TextBox上添加PreviewKeyDown并将e.Handled设置为true是否按下空格键来解决此问题,就像这样:

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    e.Handled = e.Key == Key.Space;
}

使用:

@"^[^'d's]+$"

''d ...匹配数字 (0-9)。
''s ...匹配空格字符。


private static bool IsTextAllowed(string text)
{
    return Regex.IsMatch(text, @"^[^'d's]+$");
}

你为什么要打扰正则表达式?只需使用:

private static bool IsTextAllowed(string text)
{
    return text.All(c => !char.IsWhiteSpace(c));
}

老问题..但是要禁止空格,请使用"任何非空格字符"'S加上乘数+。它基本上可以匹配任何内容,甚至是"∆",但没有空格(',''r,''t,''f,''v)

'S+

但是没有空格的数字输入可以很简单,正如@vks提到的;

^[0-9]+$