Регулярное выражение, которое проверяет количество символов - PullRequest
4 голосов
/ 11 августа 2010

Мне нужно написать регулярное выражение .NET, которое проверяет, является ли строка буквенно-цифровой и имеет 4 или 8 символов (ни меньше, ни больше).Как я могу это сделать?Я пытался с ([a-zA-Z0-9] {4}) | ([a-zA-Z0-9] {8}), но это не работает.

Ответы [ 2 ]

5 голосов
/ 11 августа 2010

Вам нужно включить начало и конец якоря строки, иначе он может соответствовать части строки:

^([a-zA-Z0-9]{4}|[a-zA-Z0-9]{8})$

Вот краткий пример использования этого регулярного выражения:

Regex regex = new Regex("^([a-zA-Z0-9]{4}|[a-zA-Z0-9]{8})$");
string[] tests = { "abcd", "0123", "01234567", "012345", "0123456789" };
foreach (string test in tests)
{
    Console.WriteLine("{0}: {1}", test.PadRight(10), regex.IsMatch(test));
}

Результат:

abcd      : True
0123      : True
01234567  : True
012345    : False
0123456789: False

Альтернативный способ написания регулярного выражения заключается в следующем:

^(?:[a-zA-Z0-9]{4}){1,2}$
1 голос
/ 11 августа 2010

Вы должны попробовать границу слова или начало / конец черты. Например, вы хотите создать строку, состоящую из букв и цифр с 4 или 8 символами без лишних пробелов:

\b([a-zA-Z0-9]{4}|[a-zA-Z0-9]{8})\b   or the string is the entire line
^([a-zA-Z0-9]{4}|[a-zA-Z0-9]{8})$

Вы можете сократить это, используя \ w как символ слова

\b(\w{4}|\w{8})\b
^(\w{4}|\w{8})$

Поскольку вы находитесь в .NET, не забывайте избегать обратной косой черты при построении шаблона регулярных выражений (если он заключен в кавычки).

Кроме того, вам не нужны круглые скобки вокруг каждого 4 или 8 символа (но вам это нужно вокруг изменения), потому что канал изменения (вертикальная черта) имеет наименьший приоритет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...