电子邮件的正则表达式

请教一个电子邮件的正则表达式写法,最好是Javascript或者Java形式的。电子邮件的格式需求如下:1,基本以这样的格式:【A部分】@【B部分】.【C部分】其中粗括号... 请教一个电子邮件的正则表达式写法,最好是Javascript或者Java形式的。电子邮件的格式需求如下:1, 基本以这样的格式: 【A部分】@【B部分】.【C部分】其中粗括号为描述用,不是电子邮件格式的一部分2, 电子邮件地址中不可以有换行符和空格4, 全文不出现粗扩号【】,下文提及的粗扩号全部是描述用3, A部分只能是大小写英文字母、数字以及【!#$%&'*+-./?^_`{|}~】这些特殊字符,不包含粗括号4, B部分只能是大小写英文字母、数字和【-】,不包含下划线【_】5, C部分只能是大小写英文字母、数字和【-.】,不包含下划线【_】6, C部分中不可以出现连续的【.】号,即【..】这样是不行的,当然,连续3个也不行7, C部分中,不可以用【.】号结尾8, 整个电子邮件格式的长度为5~255个字符(这个要求为可选,似乎做不到,如果有人做到了,我会加分采纳,前提是在正则表达式中) 展开
 我来答
匿名用户
2011-07-12
展开全部
要求挺多,还没分, 所以,自己改下面的东西去;绝对是你想要的:

######### PERL#################################
# Some things for avoiding backslashitis later on.
$esc = '\\\\'; $Period = '\.';
$space = '\040'; $tab = '\t';
$OpenBR = '\['; $CloseBR = '\]';
$OpenParen = '\('; $CloseParen = '\)';
$NonASCII = '\x80-\xff'; $ctrl = '\000-\037';
$CRlist = '\n\015'; # note: this should really be only \015.

# Items 19, 20, 21
$qtext = qq/[^$esc$NonASCII$CRlist\"]/; # for within "..."
$dtext = qq/[^$esc$NonASCII$CRlist$OpenBR$CloseBR]/; # for within [...]
$quoted_pair = qq< $esc [^$NonASCII] >; # an escaped character

########################################################################
# Items 22 and 23, comment.
# Impossible to do properly with a regex, I make do by allowing at most one level of nesting.
$ctext = qq< [^$esc$NonASCII$CRlist()] >;

# $Cnested matches one non-nested comment.
# It is unrolled, with normal of $ctext, special of $quoted_pair.
$Cnested = qq<
$OpenParen # (
$ctext* # normal*
(?: $quoted_pair $ctext* )* # (special normal*)*
$CloseParen # )
>;

# $comment allows one level of nested parentheses
# It is unrolled, with normal of $ctext, special of ($quoted_pair|$Cnested)
$comment = qq<
$OpenParen # (
$ctext* # normal*
(?: # (
(?: $quoted_pair | $Cnested ) # special
$ctext* # normal*
)* # )*
$CloseParen # )
>;

######################################################################

# $X is optional whitespace/comments.
$X = qq<
[$space$tab]* # Nab whitespace.
(?: $comment [$space$tab]* )* # If comment found, allow more spaces.
>;

# Item 10: atom
$atom_char = qq/[^($space)<>\@,;:\".$esc$OpenBR$CloseBR$ctrl$NonASCII]/;
$atom = qq<
$atom_char+ # some number of atom characters...
(?!$atom_char) # ..not followed by something that could be part of an atom
>;

# Item 11: doublequoted string, unrolled.
$quoted_str = qq<
\" # "
$qtext * # normal
(?: $quoted_pair $qtext * )* # ( special normal* )*
\" # "
>;

# Item 7: word is an atom or quoted string
$word = qq<
(?:
$atom # Atom
| # or
$quoted_str # Quoted string
)
>;

# Item 12: domain-ref is just an atom
$domain_ref = $atom;

# Item 13: domain-literal is like a quoted string, but [...] instead of "..."
$domain_lit = qq<
$OpenBR # [
(?: $dtext | $quoted_pair )* # stuff
$CloseBR # ]
>;

# Item 9: sub-domain is a domain-ref or domain-literal
$sub_domain = qq<
(?:
$domain_ref
|
$domain_lit
)
$X # optional trailing comments
>;

# Item 6: domain is a list of subdomains separated by dots.
$domain = qq<
$sub_domain
(?:
$Period $X $sub_domain
)*
>;

# Item 8: a route. A bunch of "@ $domain" separated by commas, followed by a colon.
$route = qq<
\@ $X $domain
(?: , $X \@ $X $domain )* # additional domains
:
$X # optional trailing comments
>;

# Item 6: local-part is a bunch of $word separated by periods
$local_part = qq<
$word $X
(?:
$Period $X $word $X # additional words
)*
>;

# Item 2: addr-spec is local@domain
$addr_spec = qq<
$local_part \@ $X $domain
>;

# Item 4: route-addr is <route? addr-spec>
$route_addr = qq[
< $X # <
(?: $route )? # optional route
$addr_spec # address spec
> # >
];

# Item 3: phrase........
$phrase_ctrl = '\000-\010\012-\037'; # like ctrl, but without tab

# Like atom-char, but without listing space, and uses phrase_ctrl.
# Since the class is negated, this matches the same as atom-char plus space and tab
$phrase_char =
qq/[^()<>\@,;:\".$esc$OpenBR$CloseBR$NonASCII$phrase_ctrl]/;

# We've worked it so that $word, $comment, and $quoted_str to not consume trailing $X
# because we take care of it manually.
$phrase = qq<
$word # leading word
$phrase_char * # "normal" atoms and/or spaces
(?:
(?: $comment | $quoted_str ) # "special" comment or quoted string
$phrase_char * # more "normal"
)*
>;

## Item #1: mailbox is an addr_spec or a phrase/route_addr
$mailbox = qq<
$X # optional leading comment
(?:
$addr_spec # address
| # or
$phrase $route_addr # name and address
)
>;

#########################################################################
# Here's a little snippet to test it.
# Addresses given on the commandline are described.
#

my $error = 0;
my $valid;
foreach $address (@ARGV) {
$valid = $address =~ m/^$mailbox$/xo;
printf "`$address' is syntactically %s.\n", $valid ? "valid" : "invalid";
$error = 1 if not $valid;
}
exit $error;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
灰人王
2011-07-11 · TA获得超过2456个赞
知道大有可为答主
回答量:2401
采纳率:0%
帮助的人:906万
展开全部
^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
家住海边就爱浪113
2015-11-10 · TA获得超过1.7万个赞
知道小有建树答主
回答量:1664
采纳率:94%
帮助的人:80.2万
展开全部
  正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
 例如JS:
  email: {
  msg: "邮件地址不合法",
  test: function(obj) {
  return !obj.value || /^[a-zA-Z0-9_+.-]+\@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,4}$/.test(obj.value);
  }
  }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
353lsdxgs
推荐于2018-03-19 · TA获得超过2241个赞
知道大有可为答主
回答量:4865
采纳率:0%
帮助的人:2064万
展开全部
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

这样一般就可以判断了,呵呵

邮箱正确的话还有错误信息,就是因为你上次判断邮箱有误给的提示信息这次没有去掉,简单一点你刷新以下页面或者是跳转一下页面(从本页跳到本页)就可以啦。呵呵
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式