这个正则为什么无法限制字符个数?

背景

现在有一个这样的表单需求:

textarea 支持输入多个用户名 (不限制字符类型,但是单个用户名1~50个字符)多个用户名用英文逗号隔开 (用户名无个数限制)

表单验证部分,我想直接用 正则表达式 来验证。

思路

通过这个需求,我很容易的写出了这样一个正则表达式 /^(.{1,50},?)+$/gm

  1. . 来匹配回车换行外的任意字符;
  2. {1,50} 来限制任意字符的个数;
  3. 末尾的英文逗号使用 ? 来匹配 0 或 1 次;
  4. 由于是 textarea ,可以输入多行,所以加上 gm 的标识。

问题

看起来都和需求的格式对上了,但我测试的时候发现 {1,50} 并没有对 . 生效,单个用户名我可以输入超过 50 个字符,还是通过了校验。

通过在线的 正则可视化网站 验证表达式,感觉也没问题呀,但就是无法正常校验。

regexp_visualize

😭 请问这个到底什么问题,正确的正则该如何写呢?

阅读 2.7k
1 个回答

/^(.{1,50},?)+$/gm 可以看成 /^(.{1,50},?)+$/ 可以看成 /^(.{1,50})+$/
可以看成 /^(.{1,50})(.{1,50})$/ 这不就是无限个数字嘛?所以 , 不能省略。

所以看上去应该 /^(.{1,50}(,|$))+/gm

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题