Ik probeer een formulier direct te laten checken op een juist emailadres.
Mijn code is nu als volgt:
[code:1:d7f9c41b09]<script>
function emailcheck(cur)
{
var string1=document.getElementById(“email”).value;
if (string1.indexOf("@")==-1)
{
//alert(“Please input a valid email address!”)
//return false
document.getElementById(“img”).src=‘red.gif’;
return;
}else{
document.getElementById(“img”).src=‘green.gif’;
return;
}
</script>
<form>
<input type=“text” size=“20” id=“email” onKeyPress=“emailcheck(this)”> <img src=“white.gif” id=“img” border=“2” />
</form>[/code:1:d7f9c41b09]
Ok, da’s heel simpel en geen exacte emailcontrole, maar daar gaat het in de eerste instantie niet om.
Hij werkte eerst prima zonder de else. (green.gif). Zonder die else erin, checkt’ie het emailadres keurig en zolang ik direct iets verkeerds invul blijft het plaatje rood. Maar ik wil dat’ie groen wordt zodra alles goed is. (zodra er dus een @ in het vakje staat.).
En het kan zelfs nog korter :wink: :
[code:1:65580b7281]
<script>
function emailcheck(cur)
{
var img=document.getElementById("img");
if (cur.indexOf("@")>-1)
{
img.src='green.gif';
}
else
{
img.src='red.gif';
}
}
</script>
<form>
<input type="text" size="20" id="email" onKeyPress="emailcheck(this)"> <img src="white.gif" id="img" border="2" />
</form>
[/code:1:65580b7281]
[code:1:034dd5d731]
<script type=“text/javascript”>
function emailcheck(cur){
document.getElementById(‘img’).src=(-1<cur.value.indexOf(’@’)?‘green’:‘red’)+’.gif’;
}
</script>
[/code:1:034dd5d731]
Overigens, beetje raar om eerst die input aan de call mee te geven (als this) en dan vervolgens toch maar een getElementById te doen om 'm (nog een keer) op te halen. Dus dat heb ik toch ook maar even veranderd, als je het niet erg vindt.
[quote:30435ee470="iJoost"]Ik denk dat je nog steeds een cur.value nodig hebt waar nu cur staat, toch?[/quote:30435ee470]
Nee... 's niet nodig.
[quote:30435ee470=“iJoost”]En als je 'm toch nog weer korter wilt /i aan het einde van de re en alle a-zA-Z vervangen door a-z. En 0-9 door d natuurlijk.
O! En die laatste + in de re moet weg…
En dan nog one more thing, de @ hoef je niet te escapen (scheelt weer een teken).[/quote:30435ee470]
Wat jij zegt… Regular expressions is niet mijn sterkste kant Ik weet dat deze goed z’n werk doet zo…
In elk geval die laatste + nekt je, want hij vindt nu een domeinnaam die eindigt op meer dan 4 tekens na de laatste punt ook goed. En dat is nu juist wat die {2,4} probeert te voorkomen. ;-)
[quote:cfc557ad02="iJoost"]In elk geval die laatste + nekt je, want hij vindt nu een domeinnaam die eindigt op meer dan 4 tekens na de laatste punt ook goed. En dat is nu juist wat die {2,4} probeert te voorkomen. ;-)[/quote:cfc557ad02]
Is ook de bedoeling, omdat je in plaats van een domeinnaam ook een ip nummer in zou moeten kunnen vullen...
Bij een IP adres bestaat het stuk na de laatste punt uit 1 to 3 cijfers. Dat wordt al gedekt door [a-zd]{2,4} zonder de +.
Als je de + erbij hebt staat er dus 2 tot 4 keer een letter of een cijfer en dat geheel een of meer keer. Die laatste herhaling van het geheel is overbodig. Het blijft hoe dan ook de re minder streng maken zonder dat dat ergens voor nodig is.
Probeer het maar gewoon. Neem je eigen re (zonder al mijn inkortingen), haal alleen die laatste + eruit en kijk of je nog steeds alle E-Mail adressen goedgekeurd krijgt die je maar zou willen.
[quote:5eaf0e55f2="iJoost"]En zo is de wereld weer een heeeel klein beetje verbeterd.[/quote:5eaf0e55f2]
Ik zou zo zeggen:
[code:1:5eaf0e55f2]<script type="text/javascript">
alert((/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})$/i.test("ijoost@stelling.macosx.nl")));
</script>[/code:1:5eaf0e55f2] :wink:
Ze zijn heel krachtig. Komt hier eigenlijk nauweljks nog tot z'n recht.
Enne, Kaydie. Als je nou toch die i erbij zet dan moet je wel die A-Z’s eruit halen. Want i is ignore case. En… ach, volgens mij had ik je dat al een keer gegeven.
Ah, dat wist ik niet... Ik gebruik [url=http://www.zvon.org/other/PerlTutorial/Output/regexps.html]deze[/url] pagina als leidraad, de "i" stond daar niet bij...