Ruby on rails ruby中使用regex进行密码验证时出错

Ruby on rails ruby中使用regex进行密码验证时出错,ruby-on-rails,regex,ruby,ruby-on-rails-5,Ruby On Rails,Regex,Ruby,Ruby On Rails 5,我正在尝试验证RubyonRails6应用程序的设计密码。它工作得很好,但当我在允许的符号中添加“/”符号时,会显示以下错误: /app/models/user.rb:26:字符类的过早结束:/(?=.{8,})(?=.?[A-Z])(?=.?[A-Z])(?=.?[0-9])(?=[$#/ /home/jeff/Desktop/medic/app/models/user.rb:26:语法错误,意外的']',应为''' …?[a-z])(?=.?[0-9])(?=........*/)^[^&|

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

/app/models/user.rb:26:字符类的过早结束:/(?=.{8,})(?=.?[A-Z])(?=.?[A-Z])(?=.?[0-9])(?=[$#/ /home/jeff/Desktop/medic/app/models/user.rb:26:语法错误,意外的']',应为''' …?[a-z])(?=.?[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

你的问题其实只是一个打字错误,但很棘手,值得指出。您需要在最后一个前瞻角色类中转义正斜杠:

password.match(/(?=.{8,})(?=.[A-Z])(?=..[A-Z])(?=.[0-9])(?=.[$\\/])^[^&.]+$/)
#这里有零钱

这是因为在调用
match
时指定了
/
作为分隔符,您的斜杠是一个特殊的符号-它实际上标志着正则表达式的结束。通过反斜杠转义它实际上是因为OP使用了一个以
/
分隔的正则表达式文字,而不是例如
%r{…}
或构造函数。是的,但我想可以澄清一点,它被传递给
匹配的事实在这种情况下实际上并不相关。是的,对于任何接受regex文本的Ruby函数来说,这都是一个问题。