You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写符合指定规则的邮箱与密码正则表达式?现有邮箱正则存疑

邮箱与密码正则表达式修正方案

邮箱正则修正

规则回顾

  • 域名需以google.com结尾,或以(无内容或任意内容).go结尾;
  • 整个邮箱地址至少包含3个数字,且所有字母均为小写;
  • 邮箱地址中仅包含一个$符号。

原正则存在的问题

  1. 数字数量校验逻辑错误:(?=.*[0-9]){3,}无法确保至少3个数字,这种写法只是重复预查3次,而非匹配3个数字实例;
  2. 未限制$的出现次数:仅用(?=.*\$)只能保证存在$,无法限制最多出现一次;
  3. 结构缺失:预查后未定义用户名的匹配范围,导致正则无法捕获实际的邮箱字符;
  4. 域名部分存在无效转义:&是HTML转义字符,应改为&,且域名前缀的字符范围未合理约束(需符合小写字母、数字的要求)。

修正后的正则表达式

import re
email_pattern = re.compile(r'^(?=(.*[0-9]){3,})(?=.*\$)(?!.*\$.*\$)[a-z0-9\$]+@(google\.com|(?:[a-z0-9\-]*)\.go)$')

正则解释

  • (?=(.*[0-9]){3,}):正向预查,确保整个邮箱中至少包含3个数字;
  • (?=.*\$)(?!.*\$.*\$):组合预查,确保恰好存在一个$符号;
  • [a-z0-9\$]+:匹配邮箱用户名部分,仅允许小写字母、数字和一个$;
  • @:邮箱用户名与域名的分隔符;
  • (google\.com|(?:[a-z0-9\-]*)\.go):匹配域名部分,要么是google.com,要么是任意(包括空)小写字母/数字/连字符组成的前缀加.go,(?:...)用于创建非捕获组避免不必要的分组捕获。

密码正则修正

规则回顾

  • 长度至少为8个字符;
  • 至少包含一个大写字母和一个数字;
  • 至少包含!@#$%^中的一个特殊字符。

原正则存在的问题

  1. 结构逻辑错误:将所有预查放在一个组后添加{8,},但预查是零宽断言不消耗字符,无法实现长度校验;
  2. 多余预查:(?=.*[a-zA-z0-9!@#$%^]*)无实际意义,未对密码字符做有效约束。

修正后的正则表达式

import re
pass_pattern = re.compile(r'^(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^])[A-Za-z0-9!@#$%^]{8,}$')

正则解释

  • (?=.*[A-Z]):正向预查,确保存在至少一个大写字母;
  • (?=.*[0-9]):正向预查,确保存在至少一个数字;
  • (?=.*[!@#$%^]):正向预查,确保存在至少一个指定的特殊字符;
  • [A-Za-z0-9!@#$%^]{8,}:匹配长度至少为8的密码字符,仅允许大小写字母、数字和指定特殊字符;
  • ^和$:确保正则匹配整个密码字符串,避免部分匹配。

内容的提问来源于stack exchange,提问作者Asal Halimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:28:35