regex e-mail mask для поиска вперед и поиска позади @ [duplicate]

Вот почему динамически созданные элементы не реагируют на клики & nbsp;:

var body = $("body");
var btns = $("button");
var btnB = $("<button>B</button>");
// `<button>B</button>` is not yet in the document.
// Thus, `$("button")` gives `[<button>A</button>]`.
// Only `<button>A</button>` gets a click listener.
btns.on("click", function () {
  console.log(this);
});
// Too late for `<button>B</button>`...
body.append(btnB);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

В качестве обходного пути вы должны прослушивать все клики и проверять исходный элемент & nbsp;:

var body = $("body");
var btnB = $("<button>B</button>");
var btnC = $("<button>C</button>");
// Listen to all clicks and
// check if the source element
// is a `<button></button>`.
body.on("click", function (ev) {
  if ($(ev.target).is("button")) {
    console.log(ev.target);
  }
});
// Now you can add any number
// of `<button></button>`.
body.append(btnB);
body.append(btnC);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

Это называется «Event Delegation». Хорошие новости, это встроенная функция в jQuery: -)

var i = 11;
var body = $("body");
body.on("click", "button", function () {
  var letter = (i++).toString(36).toUpperCase();
  body.append($("<button>" + letter + "</button>"));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

0
задан Randall Kwiatkowski 24 March 2017 в 16:21
поделиться

2 ответа

Обновление с различными решениями для маскировки электронной почты

  • foo@bar.comf**@b**.com (текущий вопрос) - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*") (см. демо-версия regex )
  • foo@bar.comf**@b*r.com - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*") (см. демо-версия regex )
  • foo@bar.comf*o@b*r.com - s.replaceAll("(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*") (см. ] demo [regex] )
  • foo@bar.comf**@b*****m - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*") (см. демо-версия )
  • foo@bar.comf*o@b*****m - s.replaceAll("(?<=.)[^@](?=[^@]*[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*") (см. демо-версия regex )

Оригинальный ответ

Если вы не можете использовать кнопку на основе кода , вы можете использовать

s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")

См. демонстрацию regex

Что он делает:

  • (?<=.)[^@](?=[^@]*?@) -any char, отличный от @ ([^@]), которому предшествует любой одиночный символ ((?<=.)), за которым следуют любые 0 или более символов, кроме @, до a @ ((?=[^@]*?@))
  • | - или
  • (?:(?<=@.)|(?!^)\\G(?=[^@]*$)) - соответствует местоположению в строке, которой предшествуют @ и любой символ ((?<=@.)) или (|) конец предыдущего успешного совпадения ((?!^)\\G), за которым следуют любые символы 0+, отличные от @ uo до конца строки ((?=[^@]*$))
  • . - любой одиночный символ
  • (?=.*\\.) - за ним следуют любые символы 0+ до последнего символа . в строке.
3
ответ дан Wiktor Stribiżew 18 August 2018 в 06:17
поделиться
  • 1
    Разве \S+@\S+ не выполнил бы, для большинства адресов электронной почты? – Robert 24 March 2017 в 17:32
  • 2
    @Robert: Я не верю, что вы можете использовать его для маскировки. Вы можете использовать его для извлечения большинства писем. – Wiktor Stribiżew 24 March 2017 в 17:54

Как насчет этого, если вам не нужны маски с одинаковым количеством символов исходных строк (что более анонимно):

(?<=^.)[^@]*|(?<=@.).*(?=\.[^.]+$)

Например, если вы замените совпадения на ***, результатом будет:

j***@e***.com
0
ответ дан Chuancong Gao 18 August 2018 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: