/^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/g
开始必须是一个或者多个单词字符或者是-,加上@,然后又是一个或者多个单词字符或者是-。然后是点“.”和单词字符和-的组合,可以有一个或者多个组合。
代码如下:
script type="text/javascript"
function isEmail(str){
var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
return reg.test(str);
}
var str = 'test@hotmail.com';
document.write(isEmail(str)+'br /');
var str2 = 'test@sima.vip.com';
document.write(isEmail(str2)+'br /');
var str3 = 'te-st@qq.com.cn';
document.write(isEmail(str3)+'br /');
var str4 = 'te_st@sima.vip.com';
document.write(isEmail(str4)+'br /');
var str5 = 'te.._st@sima.vip.com';
document.write(isEmail(str5)+'br /');
/script
扩展资料:
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
参考资料:正则表达式百度百科
import java.io.*;public class CheckEmail
{
public static boolean checkEmail(String email)
{// 验证邮箱的正则表达式
String format = "\\p{Alpha}\\w{2,15}[@][a-z0-9]{3,}[.]\\p{Lower}{2,}";
//p{Alpha}:内容是必选的,和字母字符[\p{Lower}\p{Upper}]等价。如:200896@163.com不是合法的。
//w{2,15}: 2~15个[a-zA-Z_0-9]字符;w{}内容是必选的。 如:dyh@152.com是合法的。
//[a-z0-9]{3,}:至少三个[a-z0-9]字符,[]内的是必选的;如:dyh200896@16.com是不合法的。
//[.]:'.'号时必选的; 如:dyh200896@163com是不合法的。//p{Lower}{2,}小写字母,两个以上。如:dyh200896@163.c是不合法的。
if (email.matches(format))
{
return true;// 邮箱名合法,返回true
}
else
{
return false;// 邮箱名不合法,返回false
}
}
public static void main(String[] args)
throws Exception{
String email = "cc**365@163.com";
// 需要进行验证的邮箱
while(true){
email = new BufferedReader(new InputStreamReader(System.in)).readLine();
if (CheckEmail.checkEmail(email))
// 验证邮箱
{ System.out.println(email+"\n是合法的邮箱名。");}
else{System.out.println(email+"\n不是合法的邮箱名。");
}
}
}
}
\w匹配字母或数字或下划线或汉字等
- 原型
\. 匹配字符.
[0-9]{1,3} 匹配数字 值范围0-9 重复次数 不低于1次 不高于3次
[a-zA-Z] 匹配大小写字母
所有用[ ]包的 都只匹配一个字符 里面写的 只是这个字符可能的值而已 就像枚举
合法E-mail地址:
1.
必须包含一个并且只有一个符号“@”
2.
第一个字符不得是“@”或者“.”
3.
不允许出现“@.”或者.@
4.
结尾不得是字符“@”或者“.”
5.
允许“@”前的字符中出现“+”
6.
不允许“+”在最前面,或者“+@”
正则表达式如下:
-----------------------------------------------------------------------
^(\w+((-\w+)|(\.\w+))*)\+\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$
-----------------------------------------------------------------------
字符描述:
^
:匹配输入的开始位置。
\:将下一个字符标记为特殊字符或字面值。
*
:匹配前一个字符零次或几次。
+
:匹配前一个字符一次或多次。
(pattern)
与模式匹配并记住匹配。
x|y:匹配
x
或
y。
[a-z]
:表示某个范围内的字符。与指定区间内的任何字符匹配。
\w
:与任何单词字符匹配,包括下划线。
$
:匹配输入的结尾。
要求挺多,还没分, 所以,自己改下面的东西去;绝对是你想要的:
######### 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;
$NonASCII$CRlist\"]/; # for within "..."$dtext = qq/[^$esc$NonASCII$CRlist$OpenBR$Close
il){// 验证邮箱的正则表达式 String format = "\\p{Alpha}\\w{2,15}[@][a-z0-9]{3,}[.]\\p{Lower}{2,}";//p{Alpha}:内容是必选的,和字母字符[\p{Lower}\p{Upper}]等价。如:200896@163.