原代码是这样的:
代码如下 | 复制代码 |
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)) <INPUT TYPE="text" NAME="mail" ID="mail"> 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> </span> |
第三种:
代码如下 | 复制代码 |
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) function email_test(str) for (i=1;i<str.length;i++) if(at_symbol==str.length-1 || at_symbol==0) if(at_symbol<3) if(at_symbol>19 ) for(i=1;i<at_symbol;i++) |
对知识补充一下
1. /^$/ 这个是个通用的格式。
^ 匹配输入字符串的开始位置;$匹配输入字符串的结束位置
2. 里面输入需要实现的功能。
* 匹配前面的子表达式零次或多次;
+ 匹配前面的子表达式一次或多次;
?匹配前面的子表达式零次或一次;
d 匹配一个数字字符,等价于[0-9]