ruby 中使用正则表达式验证密码时出错

error in password validation with regex in ruby

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

/app/models/user.rb:26:char-class 过早结束:/(?=.{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

你的问题确实只是一个错字,但是很棘手,值得指出。您需要转义最终前瞻字符 class:

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

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

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