最简单的方式是使用正则表达式。检测邮箱格式的正则表达式:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$。
1、标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库。
2、C/C++ 中使用正则表达式一般分为三步:
1)编译正则表达式 regcomp()
int regcomp (regex_t *compiled, const char *pattern, int cflags)
这个函数把指定的正则表达式pattern编译成一种特定的数据格式compiled,这样可以使匹配更有效。函数regexec 会使用这个数据在目标文本串中进行模式匹配。执行成功返回0。
2)匹配正则表达式 regexec()
int regexec (regex_t *compiled, char *string, size_t nmatch, regmatch_t matchptr [], int eflags)
当编译好正则表达式后,就可以用regexec 匹配我们的目标文本串了,如果在编译正则表达式的时候没有指定cflags的参数为REG_NEWLINE,则默认情况下是忽略换行符的,也就是把整个文本串当作一个字符串处理。执行成功返回0。
3)释放正则表达式 regfree()
void regfree (regex_t *compiled)
当使用完编译好的正则表达式后,或者要重新编译其他正则表达式的时候,可以用这个函数清空compiled指向的regex_t结构体的内容。请注意,如果是重新编译的话,一定要先清空regex_t结构体。
判断email地址格式的流程如下:
1、所有字符都必须在这个范围内:小写字母a到z 、大写字母A到Z、数字0到9、下划线_、减号-、半角小数点. 、以及@;
2、必须含有1个@字符,且这个字符不在字符串最前面或者最后面;
3、@字符到字符串末,中间必须要有一个半角小数点.;且这个小数点不紧挨@后,也不在最末位。
4、如果可以发送测试邮件,可以发送一封测试邮件
是用正则表达式,迅速解决问题。需要引用Microsoft
VBScript
Regular
Exprsession
5.5
Private
Sub
Command1_Click()
Dim
E_mail
As
String
Dim
rExp
As
New
RegExp
rExp.Pattern
=
"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
E_mail
=
InputBox("请输入您的邮箱地址",
"InputBox")
MsgBox
IIf(rExp.Test(E_mail),
"正确格式邮箱地址",
"非正确格式邮箱地址"),
,
"邮箱格式判断"
End
Sub
=IF(COUNTIF(B10,"*@*.*")=1,"","E-mail格式不对,请检查后重新输入。")
b10为检查的单元格。如果用条件格式,就在条件格式对话框中略加修改。
还可以设置“数据有效性”。选定要设置的区域(Email列或行,假定在B列),菜单“数据”-“数据有效性”,在“允许”框中选择“自定义”,在公式栏输入=COUNTIF(B1,"*@*.*")=1,“出错警告”标签中,找到“出错信息”,填“E-mail格式不对,请检查后重新输入。”
自己没亲自写过 这是引用别人的 先申明一下 使用正则表达式比较好
CREATE FUNCTION F_EMAIL
(
@EMAIL VARCHAR(50)
)
RETURNS INT --返回1是正确;返回0是错误
BEGIN
DECLARE @VALUE INT,@LEN INT
DECLARE @TMP VARCHAR(50)
DECLARE @CHECK1 VARCHAR(50)
DECLARE @CHECK2 VARCHAR(50)
DECLARE @CHECK3 VARCHAR(50)
SET @TMP=RTRIM(LTRIM(@EMAIL))
SET @LEN=LEN(@TMP)
IF @LEN-LEN(REPLACE(@TMP,'@',''))=1 AND @LEN-LEN(REPLACE(@TMP,'.',''))=1 AND CHARINDEX('@',@TMP)1
BEGIN
SET @CHECK1=LEFT(@TMP,CHARINDEX('@',@TMP)-1)
SET @CHECK2=STUFF(@TMP,1,CHARINDEX('@',@TMP),'')
SET @CHECK3=STUFF(@CHECK2,1,CHARINDEX('.',@CHECK2),'')
SET @CHECK2=LEFT(@CHECK2,CHARINDEX('.',@CHECK2)-1)
IF LEN(@CHECK1)0 and LEN(@CHECK2)0 AND LEN(@CHECK3)0
BEGIN
IF PATINDEX('%[^a-zA-Z0-9._-]%',@CHECK1)0
SET @VALUE=0
ELSE
BEGIN
IF PATINDEX('%[^a-zA-Z0-9_-]%',@CHECK2)0
SET @VALUE=0
ELSE
BEGIN
IF CHARINDEX(UPPER(@CHECK2),UPPER('gmail,QQ,163,sina,yahoo'))0
BEGIN
IF PATINDEX('%[^a-zA-Z0-9._-]%',@CHECK3)0
SET @VALUE=0
ELSE SET @VALUE=1
END
ELSE SET @VALUE=0
END
END
END
ELSE SET @VALUE=0
END
ELSE SET @VALUE=0
RETURN @VALUE
END
--测试
create table tb
(
id int identity,
email varchar(50),
CONSTRAINT chk_email CHECK (dbo.F_EMAIL(email)=1)
)
insert into tb SELECT 'ASDF@163.COM'
insert into tb SELECT 'ASDF@1263.COM'
insert into tb SELECT 'ASDF@QQ.COM'
insert into tb SELECT 'ASDF@yahoo.COM'
insert into tb SELECT 'AS@DF@yahoo.COM'
/*
(所影响的行数为 1 行)
服务器: 消息 547,级别 16,状态 1,行 1
INSERT 语句与 COLUMN CHECK 约束 'chk_email' 冲突。该冲突发生于数据库 'Test',表 'tb', column 'email'。
语句已终止。
(所影响的行数为 1 行)
(所影响的行数为 1 行)
服务器: 消息 547,级别 16,状态 1,行 1
INSERT 语句与 COLUMN CHECK 约束 'chk_email' 冲突。该冲突发生于数据库 'Test',表 'tb', column 'email'。
语句已终止。*/
SELECT * FROM TB
/*
id email
----------- --------------------------------------------------
1 ASDF@163.COM
3 ASDF@QQ.COM
4 ASDF@yahoo.COM
(所影响的行数为 3 行)
*/
cqu.edu.cn邮箱怎么注册 第三条邮件帐号的申请、开通、注销1.教工用户首次由信息与网络管理中心组织各部门统一填报,今后凭本人有效证件在信息与网络管理中心免费申请。一个教工只能申请一个邮箱帐号。...
公司企业邮箱收费是多少? 1、各个邮箱服务商的套餐不同,定价也是不一样的,大概价格在一个人200元/年。当然如果你一次性开通上百户的话,那么价格肯定就会便宜不少,因为企业邮箱收费的价格是阶梯式的,开户...
现代h1辉翼优点缺点 根据汽车之家网查询显示,现代h1辉翼发布会优点为全系搭载了一台4升的自然吸气发动机,最大的输出功率可达127千瓦,动力非常出色。现代h1辉翼4档的自动变速箱技术老旧,在燃油性方面...
有一本小说 女主女扮男装 黑客 代号黑桃K叫什么九 男主秦少 就记得这么多了 求大神们知道的帮帮忙 女主叫薄九,代号Z,黑客少主,会打架,重生后叫傅九,游戏名是黑桃Z,女扮男装,男主叫秦漠,书名《国民...
忘了flyme账户密码咋办? 1、可以到魅族手机官网自助找回账户密码,具体方法如下:打开浏览器,登录到魅族官网,然后找到“立即登录”一项并点击进入。进入到flyme账号的登录界面以后,找到“忘记密码”...
网易邮箱如何注册 网易邮箱注册步骤如下:1、打开网易邮箱App,点击右下角【注册新邮箱】。2、选择下方【注册字母邮箱】。3、输入账号,设置好密码。4、输入手机进行验证。5、完成验证后,点击右上角【跳过...