Отключить пробел в тексте

Как заблокировать пробел в записи в текстовом поле?

Я пробовал это, но он не работает:

  [RegularExpression(@"/^\s/", ErrorMessage = "white space is not allowed in username")]
  public string UserName { get; set; }

'^' отрицание не должно допускать пробела в тексте, но это не позволяет мне вводить какой-либо текст в поле. Любая помощь?

Ответ 1

Используйте \S (это отрицание символа \S= non-whitespace):

@"^\S+$"

Если пустая строка разрешена, замените + на *:

@"^\S*$"

Ответ 2

Просто увидел комментарий, который вы сказали "вам нужно работать с DataAnnotation", вот способ сделать это без Regex

public class WhiteSpaceCheckerAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var strValue = value as string;
        return strValue != null && !strValue.Contains(" ");
    }
}

Использование

[WhiteSpaceChecker(ErrorMessage = "white space is not allowed in username")]
public string UserName { get; set; }

Это не касается проверки на стороне клиента, которую вы можете легко реализовать. Следующая ссылка должна помочь вам с этой концепцией Проверка аннотации пользовательских данных на стороне клиента

Ответ 3

^ работает как "отрицание" только внутри классов символов, например. [^ ] означает любой символ, кроме пробела. Когда используется вне [], ^ означает "в начале строки. Таким образом, ваш оригинальный RE говорит" Пробел в начале строки "- почти точно противоположное тому, что вы хотите.

Я не знаком со спецификой С# RE, но из остальных ответов RE вы хотите, вероятно, ^\S+$: 1 или более непространственных символов между началом и концом строки.

Ответ 4

Вы можете сделать это без RegEx. Добавив этот код в событие KeyPress вашего текстового поля.

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = e.KeyChar == ' ';
}