我正在尝试验证我的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的结束。通过反斜杠进行转义