邮箱&密码正则表达式
📮

邮箱&密码正则表达式

Published
September 7, 2023
Author
WuZheng

需求

我们的账号登录器在移动端,PC 端,Web 端的邮箱、密码校验正则不同,需要统一。

过程

首先尝试比较正则表达式是否相等,结论是这个比较非常困难。
从这个 issue 的最后一个评论,了解到从数学角度证明两个正则表达式相等,需要巨大的工作量。
 
接着通过 2 个在线测试工具了解当前的正则是什么意思,它们可以解析填入的正则的匹配规则,很直观:
  1. https://regexr.com
  1. https://regex101.com

结论

邮箱正则

// 账号部分包括了字母、数字和多种特殊符号,域名部分,也包括了字母、数字和特殊符号。 // 需要注意的是,域名部分的特殊符号包括了下划线(_),这在一些标准邮箱格式中是不存在的。 ^[\w.!#$%&'*/=?^`{|}~+-<>\[\]()\\]+@[\w-]+\.[\w.-]{2,64}$
 
另外,也可选择 Android 系统的邮箱正则,简单明了:
// Android 系统的邮箱正则,在域名部分就不包括下划线,同时它限制了各个部分的长度,特殊符号也少很多 public static final Pattern EMAIL_ADDRESS = Pattern.compile( "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" + "\\@" + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + "(" + "\\." + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" + ")+" );

密码正则

// 包含字母、数字和特殊符号,8~20 个字符 ^[a-zA-Z0-9!#@$%^&*()+=\\\-_/?<>,.:;|]{8,20}$

参考

  1. 邮箱正则表达式:https://emailregex.com
  1. 参考 Firebase 的邮箱正则使用情况:Android 中使用系统自带的正则,iOS 没找到使用的正则