A-A+

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

2016年02月16日 web前端设计 暂无评论 阅读 6 views 次

我们知道邮箱验证最核心最重要的一句: \"\\\\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\"; 后面的什么就是很简单了。

原代码是这样的,如下代码:

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

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

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

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

  1. function isValidMail(sText) {  
  2.  var reMail = /^(?:w+.?)*w+@(?:w+.)+w+$/;  
  3.  alert(reMail.test(sText))  
  4. }  

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

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

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

实例代码如下:

  1. <script>  
  2. function validate()  
  3. {  
  4.  var pattern=/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/;  
  5.  var email = document.getElementById("mail").value;  
  6.  if(!pattern.test(email))  
  7.   alert("Wrong");  
  8.  else  
  9.   alert('Right')  
  10. }  
  11. </script>  
  12. <INPUT TYPE="text" NAME="mail" ID="mail">  
  13. <INPUT TYPE="button" VALUE="" ONCLICK="validate()">  
  14. NAME="mail" ID="mail"><INPUT TYPE="button" VALUE="" ONCLICK="validate()">  

javascript验证邮箱格式,代码如下:

  1. <SCRIPT LANGUAGE=javascript RUNAT=Server>  
  2. function isEmail(strEmail) {  
  3. if (strEmail.search(/^w+((-w+)|(.w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$/) != -1)  
  4. return true;  
  5. else  
  6. alert("oh");  
  7. }  
  8. </SCRIPT>  
  9. <input type=text onblur=isEmail(this.value)>  

第二种:用Javascript验证email填写是否正确,代码如下:

  1. <html>  
  2. <head>  
  3. <title>test</title>  
  4. <script language="javascript">  
  5. function emailCheck () {  
  6. var emailStr=document.all.form1.tel.value;  
  7. alert(emailStr);  
  8. var emailPat=/^(.+)@(.+)$/;  
  9. var matchArray=emailStr.match(emailPat);  
  10. if (matchArray==null) {  
  11. alert("电子邮件地址必须包括 ( @ 和 . )")  
  12. return false;  
  13. }  
  14. return true;  
  15. }  
  16. </script>  
  17. </head>  
  18. <body>  
  19. <form name="form1">  
  20. <input type="text" name="tel"/>  
  21. <input type="button" value="press" onclick="emailCheck()"/>  
  22. </form>  
  23.   
  24. </span>  
  25. </body>  
  26. </html>  

第三种,代码如下:

js验证Email

  1. function char_test(chr)   
  2. //字符检测函数   
  3. {   
  4. var i;   
  5. var smallch="abcdefghijklmnopqrstuvwxyz";   
  6. var bigch="ABCDEFGHIJKLMNOPQRSTUVWXYZ";   
  7. for(i=0;i<26;i++)   
  8. if(chr==smallch.charAt(i) || chr==bigch.charAt(i))   
  9.   return(1);   
  10. return(0);   
  11. }  
  12. function spchar_test(chr)   
  13. //数字和特殊字符检测函数   
  14. {   
  15. var i;   
  16. var spch="_-.0123456789";   
  17. for (i=0;i<13;i++)   
  18.   if(chr==spch.charAt(i))   
  19.   return(1);   
  20. return(0);   
  21. }  
  22. function email_test(str)   
  23. {   
  24. var i,flag=0;   
  25. var at_symbol=0;   
  26. //“@”检测的位置   
  27. var dot_symbol=0;   
  28. //“.”检测的位置   
  29. if(char_test(str.charAt(0))==0 )   
  30. return (1);   
  31. //首字符必须用字母  
  32. for (i=1;i<str.length;i++)   
  33. if(str.charAt(i)=='@')   
  34.   {   
  35.   at_symbol=i;   
  36.   break;   
  37.   }   
  38. //检测“@”的位置  
  39. if(at_symbol==str.length-1 || at_symbol==0)   
  40. return(2);   
  41. //没有邮件服务器域名  
  42. if(at_symbol<3)   
  43. return(3);   
  44. //帐号少于三个字符  
  45. if(at_symbol>19 )   
  46. return(4);   
  47. //帐号多于十九个字符  
  48. for(i=1;i<at_symbol;i++)   
  49. if(char_test(str.charAt(i))==0 && spchar_test(str.charAt(i))==0)   
  50.   return (5);   
  51. for(i=at_symbol+1;i<str.length;i++)   
  52. if(char_test(str.charAt(i))==0 && spchar_test(str.charAt(i))==0)   
  53.   return (5);   
  54. //不能用其它的特殊字符     
  55.     
  56. for(i=at_symbol+1;i<str.length;i++)   
  57. if(str.charAt(i)=='.') dot_symbol=i;   
  58. for(i=at_symbol+1;i<str.length;i++)   
  59. if(dot_symbol==0 || dot_symbol==str.length-1)   
  60. //简单的检测有没有“.”,以确定服务器名是否合法   
  61. return (6);   
  62.     
  63. return (0);   
  64. //邮件名合法   
  65. }  

对知识补充一下

1. /^$/ 这个是个通用的格式。

^ 匹配输入字符串的开始位置;$匹配输入字符串的结束位置

2. 里面输入需要实现的功能。

* 匹配前面的子表达式零次或多次;

+ 匹配前面的子表达式一次或多次;

?匹配前面的子表达式零次或一次;

d 匹配一个数字字符,等价于[0-9]

给我留言