Как дополнить регулярное выражение
При запросе нужно маскировать ФИО - удалять все знаки для фамилии и отчества, кроме первого и двух последних, вместо удалённых символов показывать три «звездочки». Для поля, имеющего до 7-ми символов включительно, удалять все знаки кроме первого. Имя не маскируется.
Пример:
Входные даннные:
- Иванов Иван Иванович
- Ли Иван Иванович
Ожидаемый результат:
- И*** Иван И***ич
- Л* Иван И***ич
Сейчас есть только такая регулярка, которая заменяет все символы на звездочки, кроме первого и последнего. Не учитывая три поля + параметры маскирования.
([a-zA-Zа-яА-Я-\s\.])[a-zA-Zа-яА-Я-\s\.]+([a-zA-Zа-яА-Я-\s\.]{2})
Ответы (1 шт):
Не идеально, но на тестовых примерах отрабатывает. Наверняка можно улучшить.
Состоит из двух частей через ИЛИ |
:
- для отчества: позитивный просмотр назад на 1 словарный символ (\w), далее 1+ словарных символов, после которых (позитивный просмотр вперед) должно быть 2 словарных символа и конец строки;
- для фамилии: позитивный просмотр назад на предмет начала строки и одного словарного символа, далее 1+ словарных символов.
Найденное заменить на ***. И не забыть включить режим юникода для правильной интерпретации \w
для кириллицы.
(?<=\w)\w+(?=\w{2}$)|(?<=^\w)\w+
При необходимости \w
можно заменить на \p{L}
, т.к. \w
содержит еще 0-9
и _
:
(?<=\p{L})\p{L}+(?=\p{L}{2}$)|(?<=^\p{L})\p{L}+