Простой RegEx для ввода имени и фамилии

Рейтинг: 1Ответов: 2Опубликовано: 08.04.2015

Здравствуйте. Подскажите, пожалуйста, как составить правильное регулярное выражение на c#. Я хочу, чтобы в TextBox можно было ввести имя и фамилию, используя только кириллицу + чтобы обязательно был пробел после имени.

Например, чтобы можно было ввести: только "Иван Иванов", а не "ИванИванов" или "Иван", или "Иван7 Иванов".

Ответы

▲ 3

В чём же проблема-то, при Вашей постановке задачи?

^[A-ЯЁ][а-яё]+\s[A-ЯЁ][а-яё]+$
Иное дело, что некоторые имена могут быть двойными-тройными, равно как и фамилии. Первый попавшийся пример - Михаил Евграфович Салтыков-Щедрин, второй более навороченый - Абу Зейд Абдуррахман ибн Мухаммад аль-Хадрами.

▲ 2

Для выделения одной кириллической буквы можно воспользоваться выражением [а-яё] (не забываем про ё). Это выражение соответствует русскому алфавиту. Букву ё включать отдельно в .NET необязательно, хотя в других языках программирования это может потребоваться. Если нужно выделять буквы кириллицы вообще, то можно воспользоваться выражением \p{IsCyrillic} (вне .NET название класса символов может отличаться), но оно не учитывает регистр символов.

При помощи * указываем, что буква может повторяться многократно или вообще отсутствовать (если имя или фамилия однобуквенные). Знаки ^ и $ позволят обрабатывать всё выражение, а не фрагмент. Таким образом, регулярное выражение принимает вид:

^[А-ЯЁ][а-яё]* [А-ЯЁ][а-яё]*$

Если вместо пробела допускается любой пробельный символ, то вместо него нужно поставить \s.

В C# для работы с регулярными выражениями используется класс Regex из пространства имён System.Text.RegularExpressions.

Простейший пример проверки строки из переменной name:

Regex regex = new Regex(@"^[А-ЯЁ][а-яё]+ [А-ЯЁ][а-яё]+$");
Match match = regex.Match(name);
if (match.Success)
{
    // Действия в случае успешной проверки
}

Как уже верно было замечено, это выражение лишь находит пару разделённых пробелом слов, но не решает задачу проверки правильности записи имён, с которыми всё гораздо сложнее.