ruby-on-rails - Rails - 不能以字符开头或结尾的用户名
问题描述
最初问这个关于用户名正则表达式的问题:不能以字符开头或结尾的用户名
如何使用正确的 Ruby on Rails 语法来实现这一点?
这是我当前的 User.rb 验证:
validates_format_of :username, with: /\A[\w\._]{3,28}\z/i
此验证允许使用下划线和句点,但目标是不允许它们出现在用户名的开头或结尾。
我正在尝试使用 Rails 正则表达式来实现这些规则:
- 可以包含小写和大写字母和数字
- 可以包含下划线和句点
- 不能连续包含 2 个下划线
- 不能连续包含 2 个句点
- 不能以下划线或句点开头或结尾
- 不能包含带重音符号的字母
- 长度必须在 3 到 28 个字母之间
有效的:
Spicy_Pizza
97Indigos
Infinity.Beyond
无效的:
_yahoo
powerup.
un__real
no..way
解决方案
您可以使用
/\A(?=.{3,28}\z)[a-zA-Z0-9]+(?:[._][a-zA-Z0-9]+)*\z/
请参阅Rubular 演示。
细节
\A
- 字符串的开始(?=.{3,28}\z)
- 允许/需要 3 到 28 个字符,而不是直到字符串末尾的换行符[a-zA-Z0-9]+
- 一个或多个 ASCII 字母/数字(?:[._][a-zA-Z0-9]+)*
- 0+ 序列:[._]
- 一个.
或_
[a-zA-Z0-9]+
- 一个或多个 ASCII 字母/数字
\z
- 字符串结束。
推荐阅读
- ruby - Ruby TCPServer 未侦听 Google Cloud Platform 上的端口
- python - 如何使用策略“均值”拟合缺失值?
- node.js - 在 GKE 上的 StatefulSet 中运行的 node.js API 上的 SSL
- scope - 变量的生命周期和范围不相关的场景
- sap - 原因:org.hsqldb.HsqlException:用户缺少权限或找不到对象:DUMMY / Invalid schema SYS
- laravel - Laravel - 从模型急切加载时获取列名
- java - 为移动应用创建 ApiKey 和 SecretKey
- javascript - 如何获取用户的语言 - navigator.languages 不起作用
- event-bus - 与事件总线的片段活动通信
- r - 如何删除“R”中多个变量中的一个的时间序列间隔?