2012-02-04 2 views
0

Вот сложный вопрос, который я не мог понять сам. Для этого, вероятно, требуется jquery и regex.Javascript: Изменить все вхождения адреса электронной почты

Выяснить скрипт изменить все вхождения адреса электронной почты на странице следующим образом:

Оригинальная электронная почта:

[email protected] 

Заменить 2-й символ с «...» И символ до последний знак препинания + все справа от него с "...":

[email protected] 

Целевыми письма каждый в элементе класса:

<p class="info"> 

И наконец, самая легкая часть, замена должна происходить только на определенном URL, например:

if(window.location.pathname == '/users') 

Любые идеи ?

+1

Пытались ли вы что-нибудь сами? Пожалуйста, отправляйте любые попытки решить эту проблему самостоятельно в своем сообщении. – Bojangles

+2

Какова идея этого вопроса? Адреса электронной почты отображаются в HTML до того, как ваш JavaScript будет выполнен, чтобы они были видны в любом случае. – CodeZombie

+2

Вам нужно сделать это наоборот. Скреперы получают HTML-код и не запускают Javascript – hugomg

ответ

0

Простое использование строковых методов

x = '[email protected]' 
x = x.charAt(0) + '...' + x.substring(2, x.lastIndexOf('.')) + '...'; 

http://jsfiddle.net/eYtY6/

/[a-z][email protected][a-z]+\.[a-z]{3,4}/i.test(x) // regex to test emails 

Я не буду делать всю работу за вас, но вот суть его. : P

http://jsfiddle.net/eYtY6/1 < - скрипка с испытанием регулярных выражений

+0

Спасибо, это заменит только одно значение, и это та часть, где я застрял. – Mark

0

OK, игнорируя любые проблемы с почему это может быть плохой идеей, и предполагая, что адреса электронной почты происходят непосредственно внутри <p class="info"> элементов, которые вы упомянули, вы могли бы попробовать что-то как это:

if(window.location.pathname == '/users') { 

    $("p.info").html(function(i,oldVal) { 
    return oldVal.replace(/[email protected]\.com/g,"[email protected]"); 
    }); 

} 

Это позволяет использовать способность .html() method «s принять обратного вызова, которая обрабатывает старый HTML и возвращает новый.

Если адрес «[email protected]» был всего лишь пример, и вы хотите сделать все возможные адреса электронной почты, то только для идентификации действительных сообщений электронной почты на странице вы будете нуждаться в pretty complicated regex, или один из многие упрощенные версии.

После того, как вы определились с соответствующим регулярным выражением вы могли бы сделать что-то вроде этого:

var re = /emailMatchingRegexOfYourChoiceHere/g; 

return oldVal.replace(re,function(match) { 
    match.charAt(0) + '...' + match.substring(2, match.lastIndexOf('.')) + '...'; 
}); 
+0

Ничего себе, это прекрасный ответ, отличная логика и рассмотрены все упомянутые моменты, спасибо !!!! Я совершенно новичок в JS, и я много часов просматриваю, чтобы реализовать это. Я нашел слишком много разных методов и просто не мог понять, как собрать правильные блоки, чтобы получить рабочую функцию. Я пробовал свой первый скрипт как тест, он отлично работает. Затем я включил ваш второй скрипт (выбрал регулярное выражение и он работает!), Но матчи возвращаются как пробелы. Я предполагаю, что функция матча не работает так, как должна ... Но я постараюсь понять это. Спасибо за помощь! – Mark

Смежные вопросы