js email 电子邮箱地址验证程序
我们知道邮箱验证最核心最重要的一句: \"\\\\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]