本文介绍如何使用JavaScript实现邮箱地址输入时的自动匹配功能。通过CSS控制提示框的滚动显示,利用onkeyup事件监听用户输入,并结合正则表达式提取并匹配预设的邮箱后缀。代码包含HTML结构、CSS样式及JS逻辑,展示了从输入获取、正则匹配到DOM更新及点击回填的完整流程。
邮箱自动匹配功能概述
自动匹配技术是指根据用户输入的信息,系统自动提示相似选项供用户选择。该技术应用广泛,例如搜索引擎在输入关键词时提示相关信息,或输入法中的联想功能。虽然这些场景较为复杂,但我们可以从简单的邮箱后缀匹配入手,理解其实现原理。具体实现代码如下:
1.css代码
CSS样式与滚动控制
#match_email
{
margin-left:48px;
overflow:auto;
display:none;
width:200px;
border:1px solid #aaa;
background:#fff;
max-height:100px;
line-height:20px;
}
#match_email div
{
text-decoration:none;
color:#000;
width:200px;
}
#match_email div:hover
{
background:#aaa;
}
input
{
height:20px;
width:200px;
}
在CSS样式中,将overflow属性设置为auto,并将max-height设置为100px。这意味着当div内容高度超过100px时,该区域会自动生成滚动条,以显示更多内容。
2.html代码
HTML结构实现
<div>
邮箱:<input type="text" name="email" id="email" autocomplete="off" onkeyup="match_mail(this.value)"/>
<div id="match_email"></div>
</div>
onkeyup事件表示当用户手指离开键盘按键时触发该事件,用于实时监听输入框的值变化。
3.js代码
JavaScript核心逻辑
<script>
//mailBoxs里存储用来匹配的串
var mailBoxs = "@163.com @126.com @129.com"
mailBoxs += " @qq.com @vip.qq.com @foxmail.com @live.cn @hotmail.com @sina.com @sina.cn @vip.sina.com";
var matchmail = document.getElementById("match_email");
var email = document.getElementById("email");
function match_mail(keyword)
{
matchmail.innerHTML = "";
matchmail.style.display = "none";
if (!keyword)
return;
if (!keyword.match(/^[\w\.\-]+@\w*[\.]?\w*/))
return;
keyword = keyword.match(/@\w*[\.]?\w*/);
var matchs = mailBoxs.match(new RegExp(keyword+"[^ ]* ","gm"));
if (matchs)
{
matchs = matchs.join("").replace(/ $/,"").split(" ");
matchmail.style.display = "block";
for (var i = 0; i < matchs.length; i++)
{
matchmail.innerHTML += '<div>'+matchs[i]+'</div>';
}
}
}
//点击除了匹配框之外的任何地方,匹配框消失
document.onclick = function(e)
{
var target = e.target;
if (target.id != "matchmail")
matchmail.style.display = "none";
}
//将匹配框上鼠标所点的字符放入输入框
matchmail.onclick = function(e)
{
var target = e.target;
email.value = email.value.replace(/@.*/,target.innerHTML);
}
</script>
在JavaScript逻辑中,多处使用了正则表达式进行字符串处理: (1)keyword = keyword.match(/@\w*[\.]?\w*/); 此步骤仅获取@符号及其后面的内容,包括@本身; (2)var matchs = mailBoxs.match(new RegExp(keyword+"[^ ]* ","gm")); 进行匹配操作,将mailBoxs中与keyword匹配的内容存入matchs数组。其中[^ ]*表示遇到空格停止匹配,参数"gm"中的'g'代表全局匹配,'m'代表多行匹配; (3)matchs = matchs.join("").replace(/ $/,"").split(" "); 此处处理字符串结尾的空格,$表示字符串的结尾位置。
在两个匿名函数中,e是鼠标点击事件发生时系统自动生成的事件对象,e.target用于获取鼠标当前点击的具体DOM对象。
最终运行效果如图所示:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。