需求
我们的账号登录器在移动端,PC 端,Web 端的邮箱、密码校验正则不同,需要统一。
过程
首先尝试比较正则表达式是否相等,结论是这个比较非常困难。
从这个 issue 的最后一个评论,了解到从数学角度证明两个正则表达式相等,需要巨大的工作量。
接着通过 2 个在线测试工具了解当前的正则是什么意思,它们可以解析填入的正则的匹配规则,很直观:
结论
邮箱正则
// 账号部分包括了字母、数字和多种特殊符号,域名部分,也包括了字母、数字和特殊符号。 // 需要注意的是,域名部分的特殊符号包括了下划线(_),这在一些标准邮箱格式中是不存在的。 ^[\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}$
参考
- 邮箱正则表达式:https://emailregex.com