添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

rfc中是这样定义邮箱格式的:

     address     =  mailbox                      ; one addressee
                 /  group                        ; named list
     group       =  phrase ":" [#mailbox] ";"
     mailbox     =  addr-spec                    ; simple address
                 /  phrase route-addr            ; name & addr-spec
     route-addr  =  "<" [route] addr-spec ">"
     route       =  1#("@" domain) ":"           ; path-relative
     addr-spec   =  local-part "@" domain        ; global address
     local-part  =  word *("." word)             ; uninterpreted
                                                 ; case-preserved
     domain      =  sub-domain *("." sub-domain)
     sub-domain  =  domain-ref / domain-literal
     domain-ref  =  atom                         ; symbolic reference

感觉说的不是很清楚,在附录中有更详细的说明.尝试了几个流行的邮箱服务商,如:

网易163 => 用户名只能包含_,英文字母,数字

腾讯邮箱 => 由英文、数字、点、减号、下划线组成

gmail => 只能使用字母 (a-z)、数字 (0-9) 和数点 (.)

yahoo邮箱 =》 4至32个字符(包括字母、数字、下划线),且必须以英文字母开始

每一家的限制都不相同:

看看这个 牛X的正则匹配 的,可以有%,最后需要有2到4个字符作为域名的结尾,但是却没有限制整体的长度:

\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

Options: case insensitive。

呵呵,因为c程序里要用到,于是综合上面各位写了一个c语言校验邮箱地址的函数:

bool IsValidEmail(const char* pszEmail, const char* pszTip) if(pszEmail == NULL) return false; int iAtPos = 0; int iLastDotPos = 0; int i = 0; int iAtTimes = 0; while(*(pszEmail + i) != ‘\0′) char ch = *(pszEmail + i); if(!isprint(ch) || isspace(ch))  //空格和控制字符是非法的,限制得还比较宽松 iAtTimes = 0; break; if(ch == ‘@’) iAtPos = i; iAtTimes++; else if(ch == ‘.’) iLastDotPos = i; if(i > 64 || iAtPos < 1 || (iLastDotPos – 2) < iAtPos || (i – iLastDotPos) < 3 || (i – iLastDotPos) > 5 || iAtTimes > 1 || iAtTimes == 0) //对@以及域名依靠位置来判断,限制长度为64 return false; return true; 相比网上另外一个版本的校验,性能应该是有所提升的: bool IsValidEmail(const char *s) char* ms; if ((ms=strchr(s,’@')) == NULL) return false; if (strchr(ms+1,’@') != NULL) return false; if (strchr(ms+1,’.') == NULL) return false; if (strchr(s,’.') < ms) if (strchr(strchr(s,’.')+1,’.') < ms) return false; if (strlen(strrchr(s,’.')+1) > 4 || strlen(strrchr(s,’.')+1) < 2) return false; return true; 通过运行1000次来计算花费了多少微妙,进行了一下性能上的比较: validemail1 test  //前一种 Time cost => 244(us), avg => 0(us) validemail2 test //后一种 Time cost => 590(us), avg => 0(us) 总体而言,第一个校验的格式比第二个要好一倍。可见字符串的操作还是比较浪费时间的。

rfc的邮箱格式说明: http://www.freesoft.org/CIE/RFC/822/61.htm

这个网站不错: http://www.regular-expressions.info/regexbuddy/email.html

rfc中是这样定义邮箱格式的: address = mailbox ; one addressee / group ; named list group = phrase ":" [#mailbox] ";" mai
要求 :用 输入 邮箱 验证 邮箱 格式是否正确( 验证 输入 邮箱地址 是否含有字符'@')。 目的:掌握 邮箱 验证 控件的原理和方法。 //用 邮箱 格式 验证 #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 20 //声明函数 int checkEmail(char [],int);
Email address book includes two types of email address: General address, include information: email address (unique), name, phone number Group address, include information: email address (unique), name, list of address(each address may be a general address or a group address). Write an Email address book management program with C/C++ language: Give an email address, find its information. If given address is a group address, should list all the general addresses in this group. Add/Remove one email address. Read email address book from a source file. Save email address book to a destination file.
1、标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其 最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库。 2、C/C++ 使用正则表达式一般分为三步: 1)编译正则表达式 regcomp() int regcomp (regex_t *compile
注意 输入 字符串 里面可能有空格,所以要nextLine()而不是next(),其他一个个 验证 就好了,@要计算次数,多了少了都不行。 import java.util.Scanner; public class eMailchecked { public static void m ain (String args[]){ Scanner input=new Scanner(System.in)
pcre *pcre_compile(const char *pattern, int options, const char **errptr, int *erroffset, const unsigned char *tableptr); 功能:...