我的表格中有一列包含emailId,其格式为每个字符后跟*
。
例如:
a*b*c*@*g*m*.*c*m*
a*b*2*d*@*g*m*.*c*m*
j*a*t*i*n*@*g*m*a*i*l*.*c*o*m*
a*3*c*@*g*m*.*c*m*
第一个字符应为字母,其余可以是字母数字,后跟@' then
*`等等。
为什么我需要这个: 我要求验证数据库中的数据是否为所需格式(如上所述)。 并找出不符合标准的行。
我试过了:
select *
from test
where email like '[a-zA-Z][*][a-zA-Z0-9][*][a-zA-Z0-9][*][@][*]%'
满足:
a*b*c*@*g*m*.*c*m*
a*3*c*@*g*m*.*c*m*
我试过了:
select *
from test
where email like '[a-zA-Z][*]([a-zA-Z0-9][*])%'
满足:
a*(v*)+s@* which is **INVALID EMAIL ID**
我试过,通常适用于C#:
select *
from test
where email like '[a-zA-Z][*]([a-zA-Z0-9][*]){2,}%'
但它没有用。
任何建议/帮助都将受到高度赞赏。
答案 0 :(得分:0)
技术上LIKE
不是正则表达式。它基本上只支持字符类(括号中的东西),通配符(_
,与典型的.
不同),以及字符串中的部分匹配(%like this%
,并省略%
}基本上像^
或$
}这样的锚。
我知道SQL很少,而且我对MS SQL完全不熟悉。如果我遗漏了任何东西(你的数据应该比我的更好),请告诉我。 (仅供参考,电子邮件a.b.d@gmail.com
有效,因此我在正确*
填充后就已允许这样做了。但是还有许多其他有效的电子邮件会拒绝,例如+
或{{ 1}}。)
-
我使用以下命令here进行了测试:
SELECT email FROM Temp1
WHERE (
--Starts with alpha
email LIKE '[a-zA-Z][*]%'
--Letter after character always *
AND email NOT LIKE '%[a-zA-Z0-9.@][^*]%'
--has an @
AND email LIKE '%[@][*][a-zA-Z]%'
--Must have alpha numerics around decimal
AND email NOT LIKE '%[^a-zA-Z0-9][*][.][*][^a-zA-Z0-9]%'
--Never 2 @'s
AND email NOT LIKE '%[@]%[@]%'
--Never ends with @* or .*
AND email NOT LIKE '%[@.][*]'
--Must end with *
AND email NOT LIKE '%[^*]'
);
答案 1 :(得分:-1)
试试这个RegEx:
[a-zA-Z][*]([a-zA-Z0-9][*])+[@][*][a-zA-Z][*]([a-zA-Z0-9][*])+([.][*]([a-zA-Z][*])+)+
如何运作
[a-zA-Z][*] # Letter, followed by * (a*, b*, c*)
([a-zA-Z0-9][*])+ # Letter / Number followed by *, appearing one or more times (2*d*, a*b*)
[@] # @ Sign
[*][a-zA-Z][*] # Letter, followed by * (a*, b*, c*)
([a-zA-Z0-9][*])+ # Letter / Number followed by *, appearing one or more times (2*d*, a*b*)
(
[.][*] # . followed by * (for TLD)
([a-zA-Z][*])+ # Letter, followed by * (a*, b*, c*), appearing one or more times (a*b*)
)+ # The TLD (above 2 rules, for .com, .org, .net) can have multiple dots
# I.e. (.co.uk, .com.vn, .us.org)