【问题标题】:username regex in rails 4 [closed]rails 4中的用户名正则表达式[关闭]
【发布时间】:2015-02-07 06:07:45
【问题描述】:

我有一个带有用户名属性的用户模型,一切正常,但是如何在用户名上制作正则表达式,所以它只接受字母数字和 _ 。 提前致谢

【问题讨论】:

  • ^\w+$ ..........
  • 你是用.结束句子还是要接受句号?
  • 我想允许用户名在结尾和开头之间有一个点或下划线
  • 在提问之前了解 Rails 和 Ruby 之间的区别 :)

标签: regex ruby-on-rails-4 devise


【解决方案1】:

你可以使用这个正则表达式:

^(\w|\.)+$

等同于:

^[a-zA-Z0-9_\.]+$

Here's preview of the regex in action 在 regex101.com 上,这里是它的细分

  • ^ 匹配字符串的开头
  • ( 只是对字符进行分组,以便可以应用修饰符
  • \w 匹配 a-zA-Z0-9_ 的任何字符强>。使其与[a-zA-Z0-9_] 相同。
  • | 是 OR 字符,因此可以找到它后面或前面的匹配项。
  • \. 完全匹配 .
  • )结束字符组
  • + 使得前一个字符组匹配一次或多次
  • $ 匹配字符串的结尾

如果您想在用户名的开头和结尾禁止._,您可以使用:

^[a-zA-Z0-9](\w|\.)*[a-zA-Z0-9]$

确保使用:multiline => true 选项,以避免错误。

【讨论】:

  • It is throwing argument error 提供的正则表达式使用多行锚(^ 或 $),这可能会带来安全风险。您是要使用 \A 和 \z,还是忘记添加 :multiline => true 选项?
  • @Mr94 这应该不是问题,因为无论如何,用户不应该被允许在正则表达式中输入多行文本。
  • 我们可以阻止用户在字符串的开头和结尾输入点和下划线,但允许在字符串内部
  • 是的,使用^[a-zA-Z0-9](\w|\.)*[a-zA-Z0-9]$
【解决方案2】:
:multiline => true must be added on the username form text_field as this:

validates :username, presence: true, length: {minimum: 3, maximum: 20 },
                                    format: { with: /\A[a-zA-Z0-9]+\z/, message: 'cannot have special characters'  },
                                    uniqueness: { case_sensitive: false }

on form: <%= f.text_field :name, class: "form-control", placeholder: " Please Enter Full Name ", autofocus: true, :multiline => true %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2011-02-15
    • 2011-07-12
    相关资源
    最近更新 更多