隐藏电子邮件域的一部分

时间:2016-09-30 00:58:11

标签: ruby regex string gsub

当用户尝试重置密码时,我试图在我的视图中隐藏电子邮件的域名部分,我正在使用gsub,但我遇到了2个字符的联合问题。

示例:

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

我得到了这个结果:

"my###\#@example.com"

我不想那个\#在##的中间,我进入了控制台,如果我只是写'#@' 我得到"\#@",我不知道如何逃避这些角色。

使用这种方法我也有一个问题,如果域少于4个字母,我仍然在域中放置4'#。但我主要担心的是'#@'的结合。

2 个答案:

答案 0 :(得分:1)

你很好;由于#@可以引用全局变量的插值(参见Why does string interpolation work in Ruby when there are no curly braces?),因此irb或pry会为你转义#以消除歧义。反斜杠实际上不在字符串中,您可以通过明确打印来验证:

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

答案 1 :(得分:0)

如果作为@Override public void onResponse(NetworkResponse response) { try { final String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); // Check if it is JSONObject or JSONArray Object json = new JSONTokener(jsonString).nextValue(); if (json instanceof JSONObject) { //do something... } else if (json instanceof JSONArray) { //do something... } else { //do something... } ... } catch (UnsupportedEncodingException | JSONException e) { e.printStackTrace(); } } 的一部分的import multiprocessing as mp import time def factor(n): for i in range(n): pass return n if __name__ == "__main__": ns = range(100000, 110000) s = time.time() p = mp.Pool(4) got = p.map(factor, ns) print(time.time() - s) assert got == list(ns) s = time.time() got = [factor(n) for n in ns] print(time.time() - s) assert got == list(ns) 未被转义且前面有@,则Ruby会插入实例变量@example的值。

假设:

'#'

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

@example

这也可以通过全局变量来完成:

nil

和类变量:

"my####@example.com" #=> "my###.com"