Email格式:[email protected]
其中“a”、“b”、“c”可任意替换,“@”和“.”位置保持不变,如果“b.c”部分是IP地址的话可以使用IP地址。要求:
1.“a”的长度不超过64个英文字符,“b.c”的长度不超过253个英文字符,“[email protected]”的长度不超过254个英文字符
2.可以使用(a–z, A–Z)
3.可以使用(0-9)
4.可以使用!, #, $, %, &, ', *, +, -, /, =, ?, ^, _, `, {, |, }, ~,(逗号分隔开的字符)
5.字符“.”不能出现在开头和结尾。
6.字符“.”不能连续出现2次,如[email protected](不支持)
7.“b.c”部分可以使用IP地址,但是必须用方括号“[”“]”括起来,如john.smith@[192.168.2.1]各位高手们,开始挑战吧:)PS:这个正则是我想拓展struts2的验证框架的,是java里面的正则。

解决方案 »

  1.   

    a、b、c的长度最短是多少,有限制吗?
      

  2.   


    高手啊,看问题很全面,确实遗漏了最小限制。补充下要求:
    8.“a”至少一个英文字符,“b”和“c”都至少2个英文字符。
      

  3.   

    1.“a”的长度不超过64个英文字符,“b.c”的长度不超过253个英文字符,“[email protected]”的长度不超过254个英文字符如果 b.c的长度刚好为253,那么a.b加上@符前面就不能有任何字符了
      

  4.   

    Review了下,发现还少了个条件:email中不能有空格。整理:
    Email格式:[email protected]
    其中“a”、“b”、“c”可任意替换,“@”和“.”位置保持不变,如果“b.c”部分是IP地址的话可以使用IP地址。要求:
    1.“a”的长度不超过64个英文字符,“b.c”的长度不超过253个英文字符,“[email protected]”的长度不超过254个英文字符
    2.可以使用(a–z, A–Z)
    3.可以使用(0-9)
    4.可以使用!, #, $, %, &, ', *, +, -, /, =, ?, ^, _, `, {, |, }, ~,(逗号分隔开的字符)
    5.字符“.”不能出现在开头和结尾。
    6.字符“.”不能连续出现2次,如[email protected](不支持)
    7.“b.c”部分可以使用IP地址,但是必须用方括号“[”“]”括起来,如john.smith@[192.168.2.1]
    8.“a”至少一个英文字符,“b”和“c”都至少2个英文字符。
    9.“[email protected]”中不能存在空格。
      

  5.   


    这个是组合的要求啊,所以如果b.c的长度为253,那这个email根据正则匹配就不合法。   :)
      

  6.   

    字符“.”不能出现在开头和结尾
    这个要分开看,还是放在一起看。换句话说,是a、b、c分别满足这个条件,还是整个email地址满足这个条件。
      

  7.   

    高手解决,咱们study , O(∩_∩)O~
      

  8.   


    是整个email头和尾不能出现“.”
      

  9.   

    必须要求只用一个正则吗?可以用多个正则吗?
    即采用 s.matches(reg1) && s.matches(reg2)... 这样的方式来判断可以吗?
      

  10.   

    [email protected]
    这样算不算匹配呢?
      

  11.   

    要是正常一点的验证我就不过来问了。就是蛋疼的需求啊~
    不匹配,“john.smith@[192.168.2.1]”这样的是匹配的。
      

  12.   

    public static boolean valMail (String str) {
    if(!"".equals(str) || str != null) {
    Pattern patt = Pattern.compile("\\w+(\\.\\w+)*@\\w+(\\.\\w+)+");
    Matcher mat = patt.matcher(str); if (mat.matches()) {
    ;
    } else {
    return false;
    }
    }我在文本上刚敲的 还没有实验 你们看看这样验证行不 也给点意见
    return true;
    }
      

  13.   

    请问有java的测试工具么,我先测试下
      

  14.   


    ^(?!\.)((?!\.\.)[a-zA-Z\d!#$%&'*\+\-/=\?^_`\{|\}~.]){1,64}(?<!\.)@(?:\w+\.\w+|\[(([01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}([01]?\d{1,2}|2[0-4]\d|25[0-5])\]){1,254}$
    这个用C#.net测试过了。java没有测试工具。没有验证
      

  15.   

    System.out.println("[email protected]".matches("^(?!\\.)((?!\\.\\.)[a-zA-Z\\d!#$%&'*\\+\\-/=\\?^_`\\{|\\}~.]){1,64}(?<!\\.)@(?:\\w+\\.\\w+|\\[(([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\]){1,254}$"));8.“a”至少一个英文字符,“b”和“c”都至少2个英文字符。
    这一条没通过.....
      

  16.   

    ^(?!\.)((?!\.\.)[a-zA-Z\d!#$%&amp;'*\+\-/=\?^_`\{|\}~.]){1,64}(?<!\.)@(?:\w{2,}\.\w{2,}|\[(([01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}([01]?\d{1,2}|2[0-4]\d|25[0-5])\]){1,254}$至于a 毫无疑问必须至少一个字符了
      

  17.   

    @^(?![.])(?!.*[.]{2,})(?!.*[ ]+)(?=.{7,254}$)(?=[^@]{1,64}@)[-0-9a-zA-Z!#$%&'*+/=?^_`\{|\}~]{1,64}@(?=.{5,253})([-0-9a-zA-Z!#$%&'*+/=?^_`\{|\}~]{2,}|\[[0-9]{1,3}(\.[0-9]{1,3}){3}\])\.([-0-9a-zA-Z!#$%&'*+=?^_`\{|\}~]{2,}|\[[0-9]{1,3}(\.[0-9]{1,3}){3}\])(?<![.])$根据你的要求,以下不包括[email protected]
    [email protected]
      

  18.   

    每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
    这里发言,表示您接受了CSDN社区的用户行为准则。
    请对您的言行负责,并遵守中华人民共和国有关法律法规,尊重网上道德。
    转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。
      

  19.   

    表达式:.net下的[^.](?:(?(\.\.)(?!)|[\w!#$%&'*+-/=?^_`{|}~])){0,62}[^.]@(?:(?:\[\d{0,3}(\.\d{0,3}){3}\])|[^.](?:(?(\.\.)(?!)|[\w!#$%&'*+-/=?^_`{|}~])){0,252}[^.])java的有点难写,看看用perl的引擎的写法
      

  20.   

    科长,理解错了喂,不是改成\w{2,}就可以的啦,需求是必须至少英文字符2个,比如a2a可以,但是2a2就不行,而\w是数字下划线都可以,
    我是感觉这个地方的数量控制挺麻烦的.
      

  21.   

    这有何难
    \w{2,} => \w*?[a-zA-Z]\w*?[a-zA-Z]\w*
      

  22.   

    厉害~~~http://wenku.baidu.com/view/d6e0ba67783e0912a2162ac9.html
      

  23.   

    已閱,13題應該是p = &(buf+1)[5]....
    題目不錯,我做錯一個,虛列點那個沒法做,你懂得。 
      

  24.   

    java的不会,c++ boost::xpressive库应该就比较简单了。
      

  25.   


    String usedChar = "a-zA-Z0-9!#\\$%&'\\*+-/=\\?\\^_\\{\\|\\}~`\\.";
    String ip = "\\[((\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\]";
    String str = "((?=^.{7,254}$)((^[^\\.]["+usedChar+"]{0,63})@((["+usedChar+"]{2,252})\\.(["+usedChar+"]{1,251}[^\\.]$))))|(([^\\.]["+usedChar+"]{0,63})(?<!\\.{2,})@"+ip+"$)";这个有个问题,不能判断出现两个..的情况。