正则表达式问题

lhj821130 2009-07-24 06:10:45
现在我要在sqlserver中实现对雅虎邮箱的用户名做正则判断,
根据雅虎定义:用户名中可以包括包括字母、数字、下划线 、单点(.),但不允许连续使用下划线或点。。。
例如:abc-.d-_e.99@yahoo.com.cn是正确的,但是abc-_d__e.99@yahoo.com.cn不符合规则。
请各位路过的大虾赐教!
...全文
142 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
fwacky 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 roy_88 的回复:]
SQL codegocreatetable Email(
IDintidentityprimarykey,
Addressnvarchar(200)constraint CHK_Email_Addresscheck(Addressnotlike'%[^0-9a-zA-Z_.@-]%'and Addressnotlike'%..%'and Addressnotlike'%[_][_]¡­
[/Quote]

定!
lgx0914 2009-07-27
  • 打赏
  • 举报
回复
学习
lihan6415151528 2009-07-27
  • 打赏
  • 举报
回复
[0-9a-zA_Z]*([_.]?[0-9a-zA_Z])*@yahoo\.com\.cn
叶子 2009-07-27
  • 打赏
  • 举报
回复
中国风的思路好独特,赞!
中国风 2009-07-26
  • 打赏
  • 举报
回复

go

create table Email(
ID int identity primary key,
Address nvarchar(200) constraint CHK_Email_Address check(Address not like '%[^0-9a-zA-Z_.@-]%'
and Address not like '%..%' and Address not like '%[_][_]%'),
passWord nvarchar(50)
)
go
insert Email values('abc-.d-_e.99@yahoo.com.cn','123')--OK

insert Email values('abc-_d__e.99@yahoo.com.cn','456')--出错

insert Email values('abc-_de..99@yahoo.com.cn','456')--出错

drop table Email
ChinaJiaBing 2009-07-26
  • 打赏
  • 举报
回复
不显示删除回复显示所有回复显示星级回复显示得分回复 正则表达式问题

前台....net实现正则表达式
jinjazz 2009-07-24
  • 打赏
  • 举报
回复
正则可以用clr函数或者sp_oamethod调用js对象
zwzw911 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sdhdy 的回复:]
用正则的话,在前台判断比较好。
[/Quote]

可以在前台编辑函数,然后编译成CLR函数,供sqlserver调用
zwzw911 2009-07-24
  • 打赏
  • 举报
回复
哦,看错了。yahoo的标准和一般的还不一样。
试试
[0-9a-zA_Z]*([_.]?[0-9a-zA_Z])*@yahoo\.com\.cn
email地址分成3部分,LZ的意思只要匹配@前面的部分。
[0-9a-zA_Z]指字母,数字,*指可以出现任意次数(0和大于0)
[_.]指下划线或者点,?指要么出现,要么没有
([_.]?[0-9a-zA_Z])*指,要么有一个下划线或者一个点,加上一个字母数字下滑线,这样的匹配可以出现0或者0次以上,例如,_a_a;要么没有_.,只有字母数字下划线,例如aaa;或者某次有_.和字母数字下划线,某次没有,例如_aa_a(注意:匹配了3次,第一次是_a,第二次是a,第三次又是_a)
zwzw911 2009-07-24
  • 打赏
  • 举报
回复
晕,怎么又是RE,发错版了吧
应该到java或者.net版。
试试下面的吧。
\w+([-.]\w)*@\w+([-.]\w)*\.\w+([-.]\w)*
sdhdy 2009-07-24
  • 打赏
  • 举报
回复
--如果返回结果>0,则证明有。
select charindex('..','abc-_d..e.99@yahoo.com.cn')
/*

-----------
7
*/
select charindex('__','abc-_d__e.99@yahoo.com.cn')
/*
-----------
7
*/
sdhdy 2009-07-24
  • 打赏
  • 举报
回复
--如果返回结果>0,则证明有。
select charindex('..',@邮箱名)
select charindex('__',@邮箱名)
sdhdy 2009-07-24
  • 打赏
  • 举报
回复
用正则的话,在前台判断比较好。
netcup 2009-07-24
  • 打赏
  • 举报
回复
d__e这个下划线是2个。
htl258_Tony 2009-07-24
  • 打赏
  • 举报
回复
abc-_d__e.99@yahoo.com.cn 这个哪里有连续下划线或点?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧