регулярное выражение для персонажей - PullRequest
3 голосов
/ 14 февраля 2010

В C # я использую RegexValidator для проверки поля, которое может содержать только значения L, l, M, m, D, d. Я пытался использовать [RegexValidator ("[l | L] [M | m] [D | d]" ..., но это не работает. Есть идеи?

Спасибо

Ответы [ 5 ]

4 голосов
/ 14 февраля 2010

Это регулярное выражение:

[l|L][M|m][D|d]

означает:

  • л, | или L; то
  • М, | или м; то
  • D, | или д.

Попытка:

^[LMD]+$

в качестве нечувствительного к регистру соответствия, если вы можете сделать это или:

^[LlMmDd]+$

если не можешь.

Оба из них требуют, чтобы вся строка соответствовала последовательности символов L, l, M, m, D или d. Используйте + для обозначения одного или нескольких, если оно не может быть пустым, или * для обозначения 0 или более, если ему разрешено быть пустым.

Редактировать: на основе обновленной информации, если вы хотите разрешить один из этих символов и только один из них, то:

^[LlMmDd]$
1 голос
/ 14 февраля 2010

Вы также можете использовать инверсию. проверьте поле на наличие символов, которых нет в вашем определенном списке.

/[^LlMmDd]+/
0 голосов
/ 14 февраля 2010

Этот код должен прочитать строку из консоли и соответствовать ей. Он должен принимать только 1 символ и совпадает с указанными вами символами.

     static void Main(string[] args)
    {
        Regex regex = new Regex(@"^[L|M|D]$", RegexOptions.IgnoreCase);
        System.Console.WriteLine("Enter Text");
        String str = System.Console.ReadLine();
        Match match = regex.Match(str);

        if (match.Success == true)
        {
            System.Console.WriteLine("Success");
        }
        else
        {
            System.Console.WriteLine("Fail");
        }
        System.Console.ReadLine();
    }
0 голосов
/ 14 февраля 2010

Вы должны прочитать о регулярных выражениях. Вы должны быть в состоянии Google (или Bing) на учебниках регулярных выражений.

[asdf] означает один и только один и не менее одного символа, который либо a, s, d, либо f.
[asdf]* означает любое количество символов, но они должны быть либо a, s, d или f.
[asdf]+ означает, по крайней мере, один символ, и они должны быть a, s, d или f.

Regexp не использует символ | в качестве оператора ИЛИ в пределах ограничения определения символа [] в квадратных скобках.

[A-Z][a-z]+[0-9] означает строку, которая должна иметь первый символ верхнего регистра (любой символ верхнего регистра от A до Z), за которым следует по крайней мере один алфавит нижнего регистра (любой символ нижнего регистра между a до z) и заканчиваться десятичная цифра.

[l|L][M|m][D|d] означает, что строка должна содержать ровно 3 символа.
Первый символ должен быть либо l, | или L.
2-й символ должен быть либо M, |, либо m.
3-й символ должен быть либо D, | или d.

[lL][Mm][Dd] может быть тем, что вы хотите использовать.
[lLMmDd]+ для строки как минимум из одного символа, ограниченного либо l, L, M, m, D или d.
[lLMmDd][lLMmDd][lLMmDd]+ для строки длиной не менее 3 символов, где все символы ограничены либо l, L, M, m, D или d.

0 голосов
/ 14 февраля 2010

Если я вас правильно понимаю, вы можете попробовать что-то вроде этого

var s1 = "Ll";
var s2 = "m";
var s3 = "LmD";
var pattern = "^[LMD]$";

Console.WriteLine( Regex.IsMatch(s1, pattern, RegexOptions.IgnoreCase) );
Console.WriteLine( Regex.IsMatch(s2, pattern, RegexOptions.IgnoreCase) );
Console.WriteLine( Regex.IsMatch(s3, pattern, RegexOptions.IgnoreCase) );

Записывает в консоль следующее

Ложная
Правда
Ложь

Вы можете использовать Regex только для строки, но вы всегда можете конвертировать свой символ

char c = 'd';
Console.WriteLine( Regex.IsMatch(new String(c,1), pattern, RegexOptions.IgnoreCase));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...