Я пытаюсь создать регулярное выражение в C#, который позволяет только алфавитно-цифровые символы и пробелы. В настоящее время я пробую следующее:
string pattern = @"^\w+$";
Regex regex = new Regex(pattern);
if (regex.IsMatch(value) == false)
{
// Display error
}
Что я делаю неправильно?
Если вам нужен только английский, попробуйте этот regex:
"^[0-9A-Za-z ]+$"
В скобках указан набор символов
0-9
: Все цифры
A-Z
: Все заглавные буквы
a-z
: Все строчные буквы
' '
: Пробелы
Если вам нужен юникод / интернационализация, вы можете попробовать этот regex:
"^[\\w ]+$"
Этот regex будет соответствовать всем буквам и цифрам юникода и пробелам, что может быть больше, чем вам нужно, поэтому если вам нужен только английский или основные римские символы, первый regex будет проще и быстрее в исполнении.
Обратите внимание, что для обоих regex я включил оператор ^
и $
, которые означают совпадение в начале и в конце. Если вам нужно извлечь это из строки, и это не обязательно должна быть вся строка, вы можете удалить эти два оператора.
Если, кроме 0-9, a-z и A-Z, вам также нужно охватить любые буквы с ударением, такие как ï, é, æ, Ć или Ş, тогда вам лучше использовать свойства Unicode \p{...}
для сопоставления, т.е. (обратите внимание на пробел):
string pattern = @"^[\p{IsLetter}\p{IsDigit} ]+$";
Класс символов \ w
не соответствует пробелам. Попробуйте заменить его на [\ w]
(после \ w
есть пробел для соответствия символам слов и пробелам. Вы также можете заменить пробел на \ s
если вы хотите сопоставить любые пробелы.