PostgreSQL中匹配@与.间恰好5个纯字母的SQL条件实现
PostgreSQL: 筛选@与.之间恰好为5个纯字母的邮箱记录
嘿,这问题我熟!要搞定这个需求,咱们直接用PostgreSQL的正则表达式匹配功能就行,结合不区分大小写的匹配操作符,精准命中符合规则的邮箱。
假设你的表名叫users,存储邮箱的字段是email,可以用下面的SQL语句:
SELECT * FROM users WHERE email ~* '^[^@]+@[a-z]{5}\.[^.]+$';
正则规则拆解
我给你拆解下这个正则的每个部分,方便你理解和调整:
^[^@]+:匹配邮箱开头到@之前的所有内容,确保@前面不是空的,而且不含@符号@:精准匹配邮箱里的@分隔符[a-z]{5}:匹配恰好5个字母,因为用了~*操作符(不区分大小写匹配),所以不管是大写还是小写字母都会被匹配到\.:匹配邮箱里的点号.,因为在正则里.是通配符,必须加反斜杠转义才能匹配真实的点号[^.]+$:匹配点号之后的后缀部分,确保后缀不是空的,而且不含其他点号(适合.com、.org这类简单后缀)
如果需要支持多后缀的邮箱(比如.co.uk)
要是你的邮箱可能有多层后缀,比如user@domain.co.uk,可以把正则的最后部分调整下,允许点号后面有任意内容:
SELECT * FROM users WHERE email ~* '^[^@]+@[a-z]{5}\..+$';
这样调整后,只要@和第一个.之间是5个纯字母,不管后面有多少层后缀都会被匹配到。
验证示例
- 符合条件的邮箱:
user@domain.com、USER@DOMAIN.org、test@AbCDe.net - 不符合的邮箱:
user@dom12n.com(含数字)、user@dom-ain.com(含连字符)、user@domai.com(只有4个字母)、user@domainn.com(6个字母)
内容的提问来源于stack exchange,提问作者afropunk
相关产品推荐
相关产品推荐

