Подтвердить что ты не робот

Регулярное выражение соответствует буквенно-цифровому и пробелу

Что я здесь делаю неправильно?

string q = "john s!";
string clean = Regex.Replace(q, @"([^a-zA-Z0-9]|^\s)", string.Empty);
// clean == "johns". I want "john s";
4b9b3361

Ответ 1

просто FYI

string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty);

будет лучше, чем

string clean = Regex.Replace(q, @"[^\w\s]", string.Empty);

Ответ 2

Это:

string clean = Regex.Replace(dirty, "[^a-zA-Z0-9\x20]", String.Empty);

\x20 является символом ascii hex для символа 'space'

вы можете добавить больше отдельных символов, которые вы хотите разрешить. Если вы хотите, чтобы, например, "?" , в строке возврата добавьте \x3f.

Ответ 3

Я понял:

string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty);

Не знал, что вы можете положить \s в скобки

Ответ 4

Я подозреваю, что ^ не работает так, как вы думаете, что делает это за пределами класса символов.

То, что вы говорите, это заменить все, что не является буквенно-цифровым с пустой строкой, или любым ведущим пространством. Я думаю, что вы хотите сказать, что пробелы в порядке, чтобы их не заменить - попробуйте переместить \s в класс [].

Ответ 5

Следующее регулярное выражение для включения пространства в текстовое поле.

Regex r = new Regex("^[a-zA-Z\\s]+");
r.IsMatch(textbox1.text);

Это отлично работает для меня.

Ответ 6

Кажется, есть две проблемы.

  • Вы используете ^ вне a [], который соответствует началу строки
  • Вы не используете * или +, что означает, что вы будете соответствовать только одному символу.

Я думаю, вам нужно следующее regex @ "([^ a-zA-Z0-9\s]) +"

Ответ 7

Огибающий внутри квадратных скобок означает все символы, кроме следующего диапазона. Вы хотите, чтобы за пределами квадратных скобок был огибающий.