JavaScript实现邮箱后缀自动匹配与提示功能

作者:小括号时间:2026-10-30 17:26:08浏览:377

本文介绍如何使用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对象。

最终运行效果如图所示:

邮箱自动匹配功能概述

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

作者最新文章