网站地图    收藏   

主页 > 前端 > javascript >

js email 电子邮箱地址验证程序

来源:自学PHP网    时间:2014-09-19 14:47 作者: 阅读:

[导读] 我们知道邮箱验证最核心最重要的一句: \"\\\\b(^[_A-Za-z0-9-]+(\\\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+(\\\\.[A-Za-z0-9-]+)*((\\\\.[A-Za-z0-9]{2,})|(\\\\.[A-Za-z0-9]{2,}\\\\.[A-Za-z0-9]{2,}))$)\\\\b\"; 后面的什么就是很简单...

原代码是这样的:

 代码如下 复制代码

function isValidMail(sText){
 var reMail = /^(?:w+.?)*w+@(?:w+.?)*w+$/;
 return reMail.test(sText);
}

似乎

这样验证像sofish@163.com这样的邮箱是没问题的。但,由于仔细看一下在AT(@)后面的非捕获性引用中,使用的是*(出现任意次):

 代码如下 复制代码

var reMail = /^(?:w+.?)*w+@(?:w+.?)*w+$/;

那么,也包括出现0次,这样的话。像sofish@163com这样的邮箱也是通过验证的。 显然,"."是必须至少出现一次的,因此,而"+"才表示至少出现一次。但这里,在AT后面,我们可以写像163.com.cn这样的结尾,但直接改成"+"的话,这样163..com.cn也可以通过验证。下面是我的方法:

 代码如下 复制代码
function isValidMail(sText) {
 var reMail = /^(?:w+.?)*w+@(?:w+.)+w+$/;
 alert(reMail.test(sText))
}

规定"."号只出现一次。然后在非捕获引用后面,让其他至少显示1次,再以任意的字符结束。不过,这里的"w"是包括下划线的,也就是说,像 sofish@163_.com_这样的邮件也是可能通过难的,显然,这是一个不合法的邮件,在AT后面的"."号后前,是不可以出现下划线的,而后面,只能是英文字母的(至少目前我没有见过用后面是数字的域名)。并且,这里应该注意到的是,"w"所代表的字符包括下划线,不用缩写是这样的:

[a-zA-Z_0-9]因此,上面的代码可以这样进行改装:

 代码如下 复制代码

function isValidMail(sText) {
 var reMail = /^(?:[a-zd]+[_-+.]?)*[a-zd]+@(?:([a-zd]+-?)*[a-zd]+.)+([a-z]{2,})+$/i;
 alert(reMail.test(sText))
}

实例

 代码如下 复制代码

<script>
function validate()
{
 var pattern=/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/;
 var email = document.getElementById("mail").value;

 if(!pattern.test(email))
  alert("Wrong");
 else
  alert('Right')
}
</script>

<INPUT TYPE="text" NAME="mail" ID="mail">
<INPUT TYPE="button" VALUE="" ONCLICK="validate()">

NAME="mail" ID="mail"><INPUT TYPE="button" VALUE="" ONCLICK="validate()">

javascript验证邮箱格式

 代码如下 复制代码
<SCRIPT LANGUAGE=javascript RUNAT=Server>
function isEmail(strEmail) {
if (strEmail.search(/^w+((-w+)|(.w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$/) != -1)
return true;
else
alert("oh");
}
</SCRIPT>
<input type=text onblur=isEmail(this.value)>

第二种:用Javascript验证email填写是否正确

 代码如下 复制代码

<html>
<head>
<title>test</title>
<script language="javascript">
function emailCheck () {
var emailStr=document.all.form1.tel.value;
alert(emailStr);
var emailPat=/^(.+)@(.+)$/;
var matchArray=emailStr.match(emailPat);
if (matchArray==null) {
alert("电子邮件地址必须包括 ( @ 和 . )")
return false;
}
return true;
}
</script>
</head>

<body>
<form name="form1">
<input type="text" name="tel"/>
<input type="button" value="press" onclick="emailCheck()"/>
</form>


</span>
</body>
</html>

第三种:

 代码如下 复制代码

js验证Email
function char_test(chr)
//字符检测函数
{
var i;
var smallch="abcdefghijklmnopqrstuvwxyz";
var bigch="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for(i=0;i<26;i++)
if(chr==smallch.charAt(i) || chr==bigch.charAt(i))
  return(1);
return(0);
}

function spchar_test(chr)
//数字和特殊字符检测函数
{
var i;
var spch="_-.0123456789";
for (i=0;i<13;i++)
  if(chr==spch.charAt(i))
  return(1);
return(0);
}

function email_test(str)
{
var i,flag=0;
var at_symbol=0;
//“@”检测的位置
var dot_symbol=0;
//“.”检测的位置
if(char_test(str.charAt(0))==0 )
return (1);
//首字符必须用字母

for (i=1;i<str.length;i++)
if(str.charAt(i)=='@')
  {
  at_symbol=i;
  break;
  }
//检测“@”的位置

if(at_symbol==str.length-1 || at_symbol==0)
return(2);
//没有邮件服务器域名

if(at_symbol<3)
return(3);
//帐号少于三个字符

if(at_symbol>19 )
return(4);
//帐号多于十九个字符

for(i=1;i<at_symbol;i++)
if(char_test(str.charAt(i))==0 && spchar_test(str.charAt(i))==0)
  return (5);
for(i=at_symbol+1;i<str.length;i++)
if(char_test(str.charAt(i))==0 && spchar_test(str.charAt(i))==0)
  return (5);
//不能用其它的特殊字符  
 
for(i=at_symbol+1;i<str.length;i++)
if(str.charAt(i)=='.') dot_symbol=i;
for(i=at_symbol+1;i<str.length;i++)
if(dot_symbol==0 || dot_symbol==str.length-1)
//简单的检测有没有“.”,以确定服务器名是否合法
return (6);
 
return (0);
//邮件名合法
}

对知识补充一下

1.  /^$/ 这个是个通用的格式。
         ^ 匹配输入字符串的开始位置;$匹配输入字符串的结束位置
 2. 里面输入需要实现的功能。
        * 匹配前面的子表达式零次或多次;
       + 匹配前面的子表达式一次或多次;
       ?匹配前面的子表达式零次或一次;
       d  匹配一个数字字符,等价于[0-9]

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论