【问题标题】:error in password validation with regex in ruby在 ruby​​ 中使用正则表达式验证密码时出错
【发布时间】:2021-02-27 08:20:04
【问题描述】:

我正在尝试验证我的 ruby​​ on rails 6 应用程序的设计密码。它工作得很好,但是当我在允许的符号内添加“/”符号时,它会显示以下错误:

/app/models/user.rb:26:char-class 提前结束:/(?=.{8,})(?=.?[AZ])(?=.?[az])(?=.?[0-9])(?=.[$#/ /home/jeff/Desktop/medic/app/models/user.rb:26:语法错误,意外']',期待')' ...?[az])(?=.?[0-9])(?=.[$#*/])^[^&|]+$/ )

我的验证限制用户输入至少一个小写字母、一个大写字母、一个数字、$#*/ 等符号,不包括 |& 等符号

这是我的验证:

  validate :password_uppercase
  def password_uppercase
    return if !!password.match(/(?=.{8,})(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*[$#*/])^[^&|]+$/)
    errors.add :password, ' password dont match'
  end

【问题讨论】:

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


    【解决方案1】:

    您的问题实际上只是一个错字,但很棘手,值得指出。您需要在最终的前瞻字符类中转义正斜杠:

    password.match(/(?=.{8,})(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*[$#*\/])^[^&|]+$/)
    #                                                                     ^^^ change is here
    

    这是因为您在对match 的调用中指定了/ 作为分隔符。

    【讨论】:

    • 从技术上讲,这真的是因为 OP 使用的是用 / 分隔的正则表达式文字,而不是例如 %r{ ... } 或构造函数。
    • 是的,但我认为可以澄清一点,在这种情况下,它被传递给 match 的事实实际上并不那么相关。
    • 是的,这对于 any Ruby 函数接受正则表达式文字来说是个问题。
    【解决方案2】:

    您的斜线是特殊符号 - 它实际上标志着正则表达式的结束。通过反斜杠转义

    【讨论】:

      猜你喜欢
      • 2021-06-12
      • 1970-01-01
      • 2021-10-17
      相关资源
      最近更新 更多