Регулярное выражение для маскировки электронной почты, кроме трех символов перед доменом - PullRequest
2 голосов
/ 21 июня 2020

Я пытаюсь замаскировать адрес электронной почты следующими способами.

  1. Замаскировать все символы, кроме первых трех и следующих за символом @. Это выражение работает нормально.

    (? <=. {3}). (? = [^ @] *? @) </p>

    abcdefgh@gmail.com -> ab c*** **@gmail.com

  2. Скрыть все символы, кроме последних трех перед символом @.

    Пример: abcdefgh@gmail.com -> *****fgh@gmail.com

    Я не уверен, как проверить @ и выполнить обратное совпадение.

Может ли кто-нибудь бросить на это указатели?

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Вы можете использовать инвертированный символьный класс [^\s@], соответствующий символу без пробелов, кроме символа @. Затем подтвердите, что справа - это инвертированный класс символов 3 раза с последующим соответствием знаку @.

В качестве замены используйте *

[^\s@](?=[^@\s]*[^@\s]{3}@)
  • [^\s@] Отрицательный класс символов, соответствует символу без пробелов, кроме @
  • (?= Положительный просмотр вперед, утверждение, что справа -
    • [^@\s]* Сопоставление 0+ раз с символом без пробелов, кроме @
    • [^@\s]{3} Трижды сопоставить символ без пробелов, кроме @
    • @ Сопоставить @
  • ) Закрыть lookahead

Regex demo


Если в адресе электронной почты может быть только один @, вы можете, например, использовать конечный квантификатор в положительном обзоре назад:

(?<=(?<!\S)[^\s@]{0,1000})[^\s@](?=[^@\s]*[^@\s]{3}@[^\s@]+\.[a-z]{2,}(?!\S))

Regex demo

1 голос
/ 21 июня 2020

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

.(?=.*...@)

См. Онлайн Демо

  • . - Любой символ, кроме новой строки.
  • (?=.*...@) - положительный просмотр вперед для нуля или более символов, кроме новой строки, за которыми следуют три символа, кроме новой строки и @.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...