首页 > 解决方案 > Rails - 不能以字符开头或结尾的用户名

问题描述

最初问这个关于用户名正则表达式的问题:不能以字符开头或结尾的用户名

如何使用正确的 Ruby on Rails 语法来实现这一点?

这是我当前的 User.rb 验证:

validates_format_of :username, with: /\A[\w\._]{3,28}\z/i

此验证允许使用下划线和句点,但目标是不允许它们出现在用户名的开头或结尾。

我正在尝试使用 Rails 正则表达式来实现这些规则:

有效的:

Spicy_Pizza
97Indigos
Infinity.Beyond

无效的:

_yahoo
powerup.
un__real
no..way

标签: ruby-on-railsrubyregexvalidationruby-on-rails-5

解决方案


您可以使用

/\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 - 字符串结束。

推荐阅读