gpt4 book ai didi

ruby-on-rails - 带有 tr 翻译的 SecureRandom 字符串显示大量下划线?

转载 作者:行者123 更新时间:2023-12-04 06:11:47 26 4
gpt4 key购买 nike

我正在使用 Devise 并尝试使用 Devise.friendly_token 来生成密码,却发现它产生了不需要的特殊字符。我发现 Devise.friendly_token 实际上使用了这个方法:

SecureRandom.urlsafe_base64(15).tr('lIO0', 'sxyz')

尝试删除“-”、“=”和“_”的特殊字符,我将 Devise.friendly_token 调用替换为:
SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU')

但是,我发现替换了下划线的“U”字符过多(显然其中一些实际上是“U”)。所以,我尝试了这个调用,它消除了“_”到“U”的翻译。
SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM')

这显示了更合理的结果分布,但仍保留下划线特殊字符。

谁能告诉我为什么会发生这种情况以及如何解决它?示例输出是:
irb(main):017:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "mvgjptsy"
irb(main):018:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "UUh1fUU-"
irb(main):019:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "UgU4U981"
irb(main):020:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "UUUU1q27"
irb(main):021:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "ajU7zjUn"
irb(main):022:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "UxgUwt7U"
irb(main):023:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "UUpUcUvU"
irb(main):024:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "U4UbU2ho"
irb(main):025:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "icsU7bcs"
irb(main):026:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_', 'sxyzEMU').first(8)
=> "5vfdfUoU"
irb(main):027:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "1Q71wib4"
irb(main):028:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "TzkKT9s6"
irb(main):029:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "iWGBgys_"
irb(main):030:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "hkxNPGKg"
irb(main):031:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "sHMDeAsc"
irb(main):032:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "Tov7bYaB"
irb(main):033:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "4vMLFdSJ"
irb(main):034:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "zxstSvs8"
irb(main):035:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "rMEdizyG"
irb(main):036:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-', 'sxyzEM').first(8)
=> "gXK33_ux"

最佳答案

-字符由 String#tr 使用来表示一个字符范围。如果您的意思是 - ,您需要使用反斜杠将其转义。示例正在更改 =进入 E , >进入 M ,以及来自 ? 的所有字符至 _ (包括所有大写字母)转换为 U ,因此有大量的 U。

要获得您预期的结果,请使用以下命令:

SecureRandom.urlsafe_base64(15).tr('lIO0=\-_', 'sxyzEMU')

关于ruby-on-rails - 带有 tr 翻译的 SecureRandom 字符串显示大量下划线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22651285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com