/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/
Secret123aB3defghTr0ub4dor9Lives_cat·secret123SECRET123SecretpassAb1
用正则先行断言校验密码规则(以及何时不该这么做)
如何用先行断言在一个正则表达式里检查“至少一个大写字母、一个数字、八个字符”,为什么不限顺序的写法离不开它们,常见正则里有哪些陷阱,以及为什么把每条规则分开检查往往是更好的设计。
Regex Hunter/blog/ · 狩猎手记
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/
Secret123aB3defghTr0ub4dor9Lives_cat·secret123SECRET123SecretpassAb1
如何用先行断言在一个正则表达式里检查“至少一个大写字母、一个数字、八个字符”,为什么不限顺序的写法离不开它们,常见正则里有哪些陷阱,以及为什么把每条规则分开检查往往是更好的设计。
Regex Hunter/^(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/
042199255·256300071000
IPv4 地址由四个 0 到 255 的数字组成。本文讲解为什么显而易见的 \d{1,3} 写法会放过 999.999.999.999,如何用分支匹配一个八位组,前导零该怎么处理,以及如何在文本中找出地址。
Regex Hunter/^https?://\S+$/
https://a.iohttp://x.com/phttps://b.dev?q=1·ftp://x.comwww.x.comhttp:/x.com
在文本中查找链接和校验一个 URL 是两件不同的事。本文为两者各给出一个正则,讲解让坏 URL 混过去的陷阱(末尾标点、未转义的点、缺失的锚点),以及何时该把工作交给 new URL() 或 urllib。
Regex Hunter/^\d{3}[-. ]?\d{3}[-. ]?\d{4}$/
555-123-4567555.123.45675551234567·555-123455-123-4567555-123-456
同一个电话号码,人们能输入出十几种写法。本文介绍如何匹配带短横线、点、空格、括号和可选 +1 的美国号码,如何检查国际 E.164 格式,以及为什么真正的校验需要借助库。
Regex Hunter/^[^\s@]+@[^\s@]+\.[^\s@]+$/
ana@site.comx+t@site.iojo@mail.co.uk·ana@example@site.coma@@b.io
今日棋盘已上线
抓住每个怪物,放过每个无辜者——字符越少越好。