Страницы

Поиск по вопросам

четверг, 12 декабря 2019 г.

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

#javascript #регулярные_выражения


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

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");


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


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


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


Ответы

Ответ 1



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

Ответ 2



function handle() { var fio = document.getElementById('fio'); fio.value = fio.value.replace(/[^А-Яа-яЁё ]/g, ""); } var input = document.getElementById('fio'); input.onkeydown = input.onkeyup = input.onkeypress = handle;

Ответ 3



Можно и так 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"); Тут главный вопрос для чего именно?

Ответ 4



Проверка полных ФИО с двойной Фамилией через тире (с учётом буквы Ё ё): /^[А-ЯЁ][а-яё]*([-][А-ЯЁ][а-яё]*)?\s[А-ЯЁ][а-яё]*\s[А-ЯЁ][а-яё]*$/ Проверка - Иванов-Фёдоров Пётр Сидорович и например для условия когда не менее 3 букв в Фамилии и Имени и Отчестве: /^[А-ЯЁ][а-яё]{2,}([-][А-ЯЁ][а-яё]{2,})?\s[А-ЯЁ][а-яё]{2,}\s[А-ЯЁ][а-яё]{2,}$/

Ответ 5



Попробуй вот такую регулярку. А вообще для ФИО их лучше не использовать /^[А-Я][а-я]*([-][А-Я][а-я]*)?\s[А-Я][а-я]*\s[А-Я][а-я]*$/

Комментариев нет:

Отправить комментарий