Регулярное выражение для проверки ФИО с учетом тире

561
08 июля 2017, 11:32

Есть регулярное выражение для проверки ФИО:

var regExp = /^([А-ЯA-Z]|[А-ЯA-Z][\x27а-яa-z]{1,}|[А-ЯA-Z][\x27а-яa-z]{1,}\-([А-ЯA-Z][\x27а-яa-z]{1,}|(оглы)|(кызы)))\040[А-ЯA-Z][\x27а-яa-z]{1,}(\040[А-ЯA-Z][\x27а-яa-z]{1,})?$/
if (regExp.test("Иванов-Сергеев Иван Иванович"))
    console.log("true");
else
    console.log("false");

Данное регулярное выражение верное, но как добавить в проверку ФИО тире? Например, для такого ФИО:

Иванов-Сергеев Иван Иванович

У людей бывает тире в фамилии или в имени.
Как будет правильно написать такое регулярное выражение?

Answer 1

Правильно будет не писать регулярное выражение на ФИО. Не портите и не усложняйте жизнь ни себе, ни пользователям.
Разве что на максимальную длину стоит сделать ограничение. Причем только как защиту от злоумышленников, которые попытаются туда подсунуть пару-тройку тысяч символов.

Answer 2

Можно и так

function isCorrectFIO(fio) {
        if (!fio) {
            return false;
    }
    var fioA = fio.split(' ');
    if (fioA.length !== 3) {
            return false;
    }
    for (var i = 0; i < 3; i++) {
            if (/[^-А-ЯA-Z\x27а-яa-z]/.test(fioA[i])) {
                return false;
        }
    }
    return true;
}
if (isCorrectFIO("Иванов-Сергеев Иван Иванович"))
    console.log("true");
else
    console.log("false");

Тут главный вопрос для чего именно?

Answer 3

Регулярка для проверки ФИО это огромное зло, но если уж очень надо, то лучше ее сделать простую, например, так \W{1,}\s\W{1,}(?=\s\W).

Используйте лучше подсказки https://dadata.ru/suggestions/#name. Для небольших проектов они и денег не берут, и данные приличные в базу попадают, проверено неоднократно.

Answer 4

Попробуй вот такую регулярку. А вообще для ФИО их лучше не использовать

/^[А-Я][а-я]*([-][А-Я][а-я]*)?\s[А-Я][а-я]*\s[А-Я][а-я]*$/
READ ALSO
Работа ajaxStop jQuery в браузерах safari, IE

Работа ajaxStop jQuery в браузерах safari, IE

Есть задача, выводить сообщение об изменениях на сайте пользователямЭто уведомление должно отрабатывать по событию ajaxStop jQuery

361
Индексация сайта на vue.js

Индексация сайта на vue.js

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

541
Вопрос по поводу setState() в react

Вопрос по поводу setState() в react

ЗдравствуйтеЯ хотел спросить по поводу поведения метода setState в react

398
Как переключать слайды в owl-carousel стрелками клавиатуры?

Как переключать слайды в owl-carousel стрелками клавиатуры?

В документации к библиотеке не нашел реализации прокрутки слайдов стрелками клавиатурыКак это можно реализовать? Нужно чтобы при нажатии...

513