背景
现在有一个这样的表单需求:
textarea
支持输入多个用户名 (不限制字符类型,但是单个用户名1~50个字符),多个用户名用英文逗号隔开 (用户名无个数限制)。
表单验证部分,我想直接用 正则表达式
来验证。
思路
通过这个需求,我很容易的写出了这样一个正则表达式 /^(.{1,50},?)+$/gm
- 用
.
来匹配回车换行外的任意字符; - 用
{1,50}
来限制任意字符的个数; - 末尾的英文逗号使用
?
来匹配 0 或 1 次; - 由于是 textarea ,可以输入多行,所以加上
gm
的标识。
问题
看起来都和需求的格式对上了,但我测试的时候发现 {1,50}
并没有对 .
生效,单个用户名我可以输入超过 50 个字符,还是通过了校验。
通过在线的 正则可视化网站 验证表达式,感觉也没问题呀,但就是无法正常校验。
/^(.{1,50},?)+$/gm
可以看成/^(.{1,50},?)+$/
可以看成/^(.{1,50})+$/
可以看成
/^(.{1,50})(.{1,50})$/
这不就是无限个数字嘛?所以,
不能省略。所以看上去应该
/^(.{1,50}(,|$))+/gm