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