JavaScript实现邮箱地址自动匹配功能代码


Posted in Javascript onNovember 28, 2016

自动匹配技术:简单的来说就是“根据用户输入的信息来提示一些相似项供用户选择”。具有很广泛的应用,比如我们最常用的百度,当输入一些搜索内容后会自动匹配很多相关信息;再比如我们最常用的输入法,都是使用这种技术,当然这些都比较难了。下面这个例子是比较简单的我们常用邮箱的匹配。代码如下:

1.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代码

<div>
  邮箱:<input type="text" name="email" id="email" autocomplete="off" onkeyup="match_mail(this.value)"/>
  <div id="match_email"></div>

</div>

onkeyup时间表示只要手指离开按钮就会触发

3.js代码

<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>

在js中好几处都用到了正则表达式:
(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是获得鼠标所点的当前对象。

最终效果如图:

JavaScript实现邮箱地址自动匹配功能代码

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

Javascript 相关文章推荐
window.parent调用父框架时 ie跟火狐不兼容问题
Jul 30 Javascript
详细讲解JS节点知识
Jan 31 Javascript
FileUpload上传图片(图片不变形)
Aug 05 Javascript
javascript模拟select,jselect的方法实现
Nov 08 Javascript
JS实现转动随机数抽奖特效代码
Apr 16 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
Sep 21 Javascript
js传值后台中文出现乱码的解决方法
Jun 30 Javascript
Node.JS中事件轮询(Event Loop)的解析
Feb 25 Javascript
uploader秒传图片到服务器完整代码
Apr 22 Javascript
微信小程序canvas写字板效果及实例
Jun 15 Javascript
关于layui toolbar和template的结合使用方法
Sep 19 Javascript
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
Nov 28 #Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
Nov 28 #Javascript
正则表达式,替换所有HTML标签的简单实例
Nov 28 #Javascript
基于slideout.js实现移动端侧边栏滑动特效
Nov 28 #Javascript
js实现右键菜单功能
Nov 28 #Javascript
Javascript 判断两个IP是否在同一网段实例代码
Nov 28 #Javascript
详解JS-- 浮点数运算处理
Nov 28 #Javascript
You might like
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
jQuery 对象中的类数组操作
2009/04/27 Javascript
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
javascript中new关键字详解
2015/12/14 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
Python使用新浪微博API发送微博的例子
2014/04/10 Python
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
Django 限制访问频率的思路详解
2019/12/24 Python
python集合能干吗
2020/07/19 Python
python入门教程之基本算术运算符
2020/11/13 Python
详解pandas赋值失败问题解决
2020/11/29 Python
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
经典c++面试题三
2015/07/08 面试题
如何手工释放资源
2013/12/15 面试题
最新英语专业学生求职信范文
2013/09/21 职场文书
大学生年度自我鉴定
2013/10/31 职场文书
2015年中学团委工作总结
2015/07/22 职场文书