要求:
  (1)email前缀规则:
        英文26个字母、10个阿拉伯数字、点、减号或下划线组成,只能以数字或字母开头和结尾
  (2)域名命名规则:
        英文26个字母、10个阿拉伯数字、减号组成,只能以数字或字母开头和结尾,总共不能超过63个字符
 (3)不区分大小写。测试用例:
1. 123@_234.com
2. [email protected]
3. [email protected]
4. [email protected]
5. 123@a_.com
6. [email protected]
7. [email protected]
8. [email protected],6是正确的,其它都是错误的。请回复前先通过上面8条测试。

解决方案 »

  1.   

    ms自带的\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
      

  2.   

    现在网上流转的版本都差不多。baidu和google没多少区别。
      

  3.   

    ms自带的,就它了\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*--------------------------------------------------------------------------------
    析软网
    http://www.parsesoft.net
    致力于 DocBook 的应用,专注于开源软件的解析、手册/指南、以及应用文章、书籍的发布。
      

  4.   

    ([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})
      

  5.   

    to Mirricle(Miracle Supply) :
    看题不仔细。怎么可以全通过啊!就是要验证不通过。
      

  6.   

    http://regexlib.com
    在这里找吧 Category选Email  直接搜索就行了
      

  7.   

    \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
      

  8.   

    try^(?!.{64,}$)(?!(\.|-|_))(?![a-zA-Z0-9\.\-_]*(\.|-|_)@)[a-zA-Z0-9\.-_]+@(?![-_])(?![a-zA-Z0-9-_]*[-_]\.)[a-zA-Z0-9\-_]+(\.\w+)+$已测试,符合楼主目前所给条件,如果实际应用中还有不符合的,楼主给出实例,或说明下哪种情况不符合,我再改一下另:
    域名 这里指的是哪一部分
    总共不能超过63个字符 是指这里所说的域名部分,还是email地址的整体
    没有对类似于com,com.cn做限制,因为现在.cc,.cn这样的域名太多,如有需要,说明一下,都允许哪种形式的域名
      

  9.   

    to lxcnn(过客):
    域名部份是这样的:aaa.bbb
    63个字符是指 aaa 部份不能超过63个字符。
    bbb部份可以是com,com.cn,cn等。你给的这个正则还真强,目前还没测出不符的。哈
      

  10.   

    我上面限制的是整体不能超过63个字符,如你上面所述为aaa部分,那改成这样^(?!(\.|-|_))(?![a-zA-Z0-9\.\-_]*(\.|-|_)@)[a-zA-Z0-9\.-_]+@(?!.{64,}\.)(?![-_])(?![a-zA-Z0-9-_]*[-_]\.)[a-zA-Z0-9\-_]+(\.\w+)+$这里还是没有对aaa.bbb中的bbb进行处理,因为我们知道,现在的
    .com
    .net
    .org
    .com.cn
    .uk
    等等,实在太多,无法一一列举,所以只按你的要求,限定了
    [email protected]
    这里的zzz@aaa部分PS:正则没有真正通用的,要具体问题具体分析,否则也不会有正则的存在了,像这类有特殊要求的正则,百度、Google是不会找到答案的
      

  11.   

    /// <summary>
        /// 验证Email地址 
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public bool IsValidEmail(string strIn, int _Len)
        {        
            // Return true if strIn is in valid e-mail format. 
     //     (1)email前缀规则:
     //         英文26个字母、10个阿拉伯数字、点、减号或下划线组成,只能以数字或字母开头和结尾
     //     (2)域名命名规则:
     //         英文26个字母、10个阿拉伯数字、减号组成,只能以数字或字母开头和结尾,总共不能超过63个字符
     //     (3)不区分大小写。
            //总长度63指整个email地址的长度? 
            //对于长度 应该先判断.
            if (strIn.Length > _Len)
                return false;
            string parter = @"(^[a-zA-Z\d]+[a-zA-Z\d\._-]*@[a-zA-Z\d]+[a-zA-Z\d\._-]*[a-zA-Z]+$)";
            return System.Text.RegularExpressions.Regex.IsMatch(strIn, parter);
        }
      

  12.   

    to lxcnn(过客):
    太感谢了。简直把正则运用得出神入化啊。
      

  13.   

    呵呵,多谢楼主的信任和支持,我测试了下,又找到一个bug,上面写的,类似于[email protected]这样前面带“-”的通不过,下面为重新更正的
    ^(?!(\.|-|_))(?![a-zA-Z0-9\.\-_]*(\.|-|_)@)[a-zA-Z0-9\.\-_]+@(?!.{64,}\.)(?![\-_])(?![a-zA-Z0-9-_]*[\-_]\.)[a-zA-Z0-9\-_]+(\.\w+)+$如果实际应用中还有问题,给我发站内信吧
      

  14.   

    哦,上面还有一处,虽然不影响结果,但还是统一一下,改过来吧^(?!(\.|-|_))(?![a-zA-Z0-9\.\-_]*(\.|-|_)@)[a-zA-Z0-9\.\-_]+@(?!.{64,}\.)(?![\-_])(?![a-zA-Z0-9\-_]*[\-_]\.)[a-zA-Z0-9\-_]+(\.\w+)+$
      

  15.   

    奇怪了,对 [email protected] (要通过)
    上面这句就通不过。而上上句就通过了。好象没改到这部份啊。