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
的调用中指定了 /
作为分隔符。
您的斜线是特殊符号 - 它实际上标志着正则表达式的结束。通过反斜杠转义
我正在尝试在 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
的调用中指定了 /
作为分隔符。
您的斜线是特殊符号 - 它实际上标志着正则表达式的结束。通过反斜杠转义