/ / Як я не дозволяю спеціальні символи, але дозволяю місце в регулярному виразі? - c #, регулярний вираз

Як дозволити спеціальні символи, але дозволити пробіл у регулярному виразу? - c #, регулярний вираз

Мені потрібно заповнити повідомлення про помилку, коли користувач вводить спеціальні символи в перегляд даних. на даний момент у мене є наступне:

if (Regex.IsMatch(columnValue.ToString(),"^[A-Za-z0-9]$"))
{
MessageBox.Show("You may not use special characters.", "Saving not allowed at this time", MessageBoxButtons.OK, MessageBoxIcon.Error);

цей регулярний вираз працює, і не допускає спеціального символу, проте воно потрапляє в оператор if, якщо між символами є пробіл, який повинен бути дозволений.

Як зробити це, щоб дозволити пробіл, але не спеціальні символи?

Дякую,

Відповіді:

6 за відповідь № 1

Я думаю, ви просто хочете додати пробіл до вашого регулярного виразу:

if (Regex.IsMatch(columnValue.ToString(),"^[ A-Za-z0-9]$"))

При написанні регулярних виразів, як правило, добре використовувати звичний оператор рядка @ тому що багато спеціальних виразів вимагають використання символу зворотної риски.

if (Regex.IsMatch(columnValue.ToString(), @"^[ A-Za-z0-9]$"))

Якщо ви явно вказували регулярному виразу ігнорувати пробіл у шаблоні, ви повинні були б уникнути символу пробілу.

if (Regex.IsMatch(columnValue.ToString(), @"^[ A-Za-z0-9]$", RegexOption.IgnorePatternWhitespace))

Якщо ви хочете, щоб вони могли використовувати будь-які пробільні символи (пробіли, вкладки, нові рядки тощо), ви можете використовувати клас пробілів символів s

if (Regex.IsMatch(columnValue.ToString(), @"^[sA-Za-z0-9]$"))

Оновити

Схоже, що ви хотіли мати регулярний вираз, який виключає символи в групі.

Ваш поточний регулярний вираз виглядає з початку рядка ^ до кінця рядка $ для одного символу в групі A-Za-z0-9. Якщо ви хочете відповідати точно протилежному, ви можете скористатися не оператором ! до твого Regex.IsMatch, люблю:

if (!Regex.IsMatch(columnValue.ToString(), @"^[ A-Za-z0-9]$"))

Але якщо ви хочете написати виключену групу символів у ваш регулярний вираз, ви можете поставити a ^ у вашій групі. Коли ^ знаходиться всередині групи [^] будь-які символи, які з'являються після виключення з матчу.

Регулярний вираз [A-Z] буде відповідати будь-якому символу A-Z. Регулярний вираз [^A-Z] відповідатиме будь-якому символу НЕ A-Z.

Якщо це те, що ви шукали, ви можете змінити свою заяву на:

if (Regex.IsMatch(columnValue.ToString(), @"[^A-Za-z0-9 ]"))

Ця операція відповідатиме будь-якому рядкумістить будь-який символ, який не входить до групи. Так що якщо вони набирають "Hello World", це не відповідає. Якщо вони набрали "Hello! World", це відповідатиме тому, що "!" не входить до групи.

ПРИМІТКА ^ і попереду $ видалено. У цьому регулярному виразі ми не дбаємо про довжину рядка, оскільки ми лише узгоджуємося з символом, якого ми не очікували ніде в рядку.


3 для відповіді № 2
if (Regex.IsMatch(columnValue.ToString(),"^[A-Za-z0-9 ]+$"))
{
MessageBox.Show("You may not use special characters.", "Saving not allowed at this time", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

або як одну булеву перевірку для перевірки

bool isValid = Regex.IsMatch(columnValue, "^[a-z0-9 ]+$", RegexOptions.IgnoreCase);

0 для відповіді № 3

Додайте пробіл у клас символів, тобто використовуйте ^[A-Za-z0-9 ]$ замість ^[A-Za-z0-9]$. Це все одно заборонятиме інші символи пробілів, наприклад tab.


0 для відповіді № 4

Ви можете включити всі цифри, рядки та пробіл :)

"^[a-z]|[A-Z]|[0-9]|[ ]$"

або

"^[d+]|[w+]|[ ]$"

0 для відповіді № 5

Чому б не спробувати цей регулярний вираз: [a-zA-Z0-9s]+