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 相关文章推荐
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
Jun 19 Javascript
JQuery Highcharts 动态生成图表的方法
Nov 15 Javascript
JavaScript设置body高度为浏览器高度的方法
Feb 09 Javascript
通过伪协议解决父页面与iframe页面通信的问题
Apr 05 Javascript
javascript实现简单查找与替换的方法
Jul 22 Javascript
百度地图API之本地搜索与范围搜索
Jul 30 Javascript
JS打开摄像头并截图上传示例
Feb 18 Javascript
javascript 中的try catch应用总结
Apr 01 Javascript
微信小程序实现验证码获取倒计时效果
Feb 08 Javascript
vue-cli axios请求方式及跨域处理问题
Mar 28 Javascript
js+html5 canvas实现ps钢笔抠图
Apr 28 Javascript
vue.js实现左边导航切换右边内容
Oct 21 Javascript
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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
JS 封装父页面子页面交互接口的实例代码
2019/06/25 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
Python测试人员需要掌握的知识
2018/02/08 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
python如何控制进程或者线程的个数
2020/10/16 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
为什么需要版本控制?
2013/08/08 面试题
英文自荐信
2013/12/15 职场文书
人力资源专员岗位职责
2014/01/30 职场文书
优秀员工演讲稿
2014/05/19 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
2014年设计师工作总结
2014/11/25 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
小学四年级学生评语
2014/12/26 职场文书
事业单位聘任报告
2015/03/02 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
Mybatis是这样防止sql注入的
2021/12/06 Java/Android
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL