在ruby中使用regex验证密码时出错



我正在尝试验证我的ruby on rails 6应用程序的设计密码。它工作得很好,但当我加上"/"在允许的标志内签名,它向我显示以下错误:

/app/models/user.rb:26:字符类过早结束:/(?=.{8,}//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])(?=.*[$#*/])^[^&|]+$/)
#                                                                     ^^^ change is here

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

您的斜杠是一个特殊的符号,它实际上标志着regex的结束。通过反斜杠进行转义

相关内容

  • 没有找到相关文章

最新更新