Har ett javaskript som på klientsidan gör epostadresser inom body till klickbara länkar. Nu är det dock så att jag vill ange ett undantag, nämligen att epostadresser som ligger inom ett formulär ska ignoreras. På nåt sätt ska väl en koll ske att eposten inte föregås av <form och inte har </form> efter sig. Hur fixar jag det? Rätta mig om jag har fel nu, men denna variant jag lyckats sätta ihop fungerar väl fast gör precis tvärtom mot det jag önskar. Denna hittar epostadresser inom ett formulär istället för utanför. Varken javascript eller reg exp är tyvärr någon av mina starka sidor. Skulle du kunna visa hur du menar att scriptet i mitt allra första inlägg ska skrivas om för att få med din funktionalitet? Visst: Får jag besvära om ett ytterligare tillägg? :) Jepp:req ex i javascript för e-post
<code><SCRIPT language="JavaScript" type="text/javascript">
<!--
function RecodeEposts() {
var strang= document.body.innerHTML;
// gör epost klickbar
strang= strang.replace(/(^|\s|>)([^\s\"\|>]+@[^\s<\|]+)/gim,'$1$2');
document.body.innerHTML= strang;
}
//kör
RecodeEposts();
//-->
</SCRIPT></code>Sv: req ex i javascript för e-post
<code>strang=strang.replace(/(<form[\w\W]*?)(^|\s|>)([^\s\"\|>]+@[^\s<\|]+)([\w\W]*?form>)/gim,'$1$2$3$4');</code>
Hur får jag den tvärtom?
Hur talar jag om att INTE <form får finnas före och INTE form> får finnas efter?Sv:req ex i javascript för e-post
function makeEmailLinks( markup )
{
var inForm = false;
var linkTemplate = "#";
return markup.replace( /(?:<\/?form[^>]*>)|(?:\w+@\w+\.\w{2,3})/ig, function ( str ) {
var f2 = str.substr(0,2).toLowerCase();
switch ( f2 )
{
case "<f":
inForm = true;
return str;
case "</":
inForm = false;
return str;
default:
if ( !inForm )
{
return linkTemplate.replace( /#/g, str );
}
return str;
}
});
}
Använd möjligheten att skicka med en funktion som andra parameter till replace metoden. Den funktionen kommer att anropas varje gång regexet matchas i strängen och du kan välja vad som returneras. Om en form-starttag matchas, sätt en flagga som indikerar att vi är inne i ett form-element, och nollställ den när en form-sluttag matchas, returnera det som matchats. Om en mail-address matchas kolla med flaggan och ersätt bara om flaggan inte är satt.
Sv: req ex i javascript för e-post
Sv:req ex i javascript för e-post
function RecodeEposts() {
document.body.innerHTML= makeEmailLinks( document.body.innerHTML );
}
// function makeEmailLinks( markup)
// ...
Edit: regexet för epost-adressen vill du nog ändra, det var bara nåt snabbt jag slängde ihop i testsyfte...
Sv: req ex i javascript för e-post
Förutom att ignorera de inom ett formulär, kan man även lägga till att även epostadresser som redan finns inom en a-tag också ska ignoreras?Sv:req ex i javascript för e-post
function makeEmailLinks( markup )
{
var flags = 0;
var linkTemplate = "#";
return markup.replace( /(<\/?form[^>]*>)|(<\/?a)|(?:\w+@\w+\.\w{2,3})/ig, function ( str, form, a ) {
var result = str;
if ( form )
if ( form.charAt(1) == "/" )
flags &= ~0x1;
else
flags |= 0x1;
else if ( a )
if ( a.charAt(1) == "/" )
flags &= ~0x2;
else
flags |= 0x2;
else
if ( flags == 0 )
result = linkTemplate.replace( /#/g, str );
return result;
});
}