Python正则实现自定义规则邮箱校验,排除ya.ru/ya.ua指定域名
符合要求的邮箱校验正则及Python实现
正则修改思路
在你提供的基础正则上针对四条规则逐一调整:
- 规则1(登录名最短6字符):将原登录名部分的
+(匹配1次及以上)改为{6,}(匹配至少6次) - 规则2(不能以2个数字开头):开头添加负向前瞻
(?![0-9]{2}),直接过滤掉前两位都是数字的情况 - 规则3(禁止ya.ru/ya.ua域名):@符号后添加负向前瞻
(?!ya\.(ru|ua)),精准匹配禁用的两个域名 - 规则4(支持多级域名):原正则的域名匹配逻辑
([\w-]+\.)+[\w-]{2,4}本身就支持多级结构,无需额外修改
最终校验正则
r'^(?![0-9]{2})[\w-\.]{6,}@(?!ya\.(ru|ua))([\w-]+\.)+[\w-]{2,4}$'
Python使用示例
import re def check_email(email: str) -> bool: email_pattern = r'^(?![0-9]{2})[\w-\.]{6,}@(?!ya\.(ru|ua))([\w-]+\.)+[\w-]{2,4}$' return bool(re.match(email_pattern, email)) # 测试样例 test_cases = [ "test123@google.com.ua", # 合法:满足所有规则 "12test@qq.com", # 非法:登录名前两位为数字 "abc@163.com", # 非法:登录名仅3位,长度不足 "user001@ya.ru", # 非法:使用禁用域名 "hello.world@outlook.com" # 合法:满足所有规则 ] for case in test_cases: res = "校验通过" if check_email(case) else "校验不通过" print(f"{case}: {res}")
内容的提问来源于stack exchange,提问作者kyryl0
相关产品推荐
相关产品推荐

