Ruby 隐藏电子邮件域的一部分

Ruby 隐藏电子邮件域的一部分,ruby,regex,string,gsub,Ruby,Regex,String,Gsub,我试图在我的视图中隐藏电子邮件的域部分,当用户尝试重置密码时,我使用的是gsub,但我遇到了两个字符并集的问题 例如: "myemail@example.com".gsub(/.{0,4}@/,'####@') 我得到了这个结果: "my###\#@example.com" 我不想把它放在中间,我进入控制台,如果我只写 '* @ '/COD> 我得到了“\\\@”,我不知道如何转义这些字符 使用这种方法我也有一个问题,如果域少于4个字母,我仍然在域中放置4'#'。但我最关心的是“#@”的连接

我试图在我的视图中隐藏电子邮件的域部分,当用户尝试重置密码时,我使用的是gsub,但我遇到了两个字符并集的问题

例如:

"myemail@example.com".gsub(/.{0,4}@/,'####@')
我得到了这个结果:

"my###\#@example.com"
<>我不想把它放在中间,我进入控制台,如果我只写<代码> '* @ '/COD> 我得到了
“\\\@”
,我不知道如何转义这些字符

使用这种方法我也有一个问题,如果域少于4个字母,我仍然在域中放置4'#'。但我最关心的是“#@”的连接处。

你很好;irb或pry正在为您转义#,以便在其漂亮的打印中消除歧义,因为#@可以指全局变量的插值(请参阅)。反斜杠实际上不在字符串中,可以通过显式打印来验证:

print("myemail@example.com".gsub(/.{0,4}@/,'####@'))

如果
@
作为
@example
的一部分没有转义,并且前面有
'#'
,Ruby将插入实例变量
@example
的值

假设:

@example = 'hi'
"my####@example.com" #=> "my###.com"
如果没有实例变量
@example
,引用它将返回
nil
,该值将转换为空字符串

"my####@example.com" #=> "my###.com"
这也可以通过全局变量实现:

$example = 'ho'
"my####$example.com" #=> "my###ho.com"
@@example = 'hum'
"my####@@example.com" #=> "my###hum.com"
对于类变量:

$example = 'ho'
"my####$example.com" #=> "my###ho.com"
@@example = 'hum'
"my####@@example.com" #=> "my###hum.com"