禁止使用正则表达式中的空格

时间:2015-01-01 19:33:12

标签: c# regex whitespace

我有这段代码:

    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);
    }

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

6 个答案:

答案 0 :(得分:2)

在正则表达式中,\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);
}

这是regex101测试:https://regex101.com/r/aS9xT0

答案 1 :(得分:1)

使用:

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

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


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

答案 2 :(得分:1)

^[^0-9 ]+$

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

答案 3 :(得分:1)

*不是正则表达式的答案,我对space char的问题也有同样的问题

我通过在PreviewKeyDown上添加TextBox并将e.Handled设置为true来修复此问题(如果已按下空格键),就像这样:

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

答案 4 :(得分:1)

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

   <TextView
        android:id="@+id/tv_cal_burnt"
        android:layout_height="0dp"
   ...

答案 5 :(得分:1)

古老的问题..但是,要禁止使用空格,请使用“任何非空格字符” \S和乘数+。它将基本上匹配所有内容,甚至是'∆',但没有空格(\ n,\ r,\ t,\ f,\ v)

\S+

但是就像@vks所提到的那样,没有空格的数字输入就可以了;

^[0-9]+$