2014-09-18 21 views

回答

2

如果您已將電子郵件分成了addressdomain,這會更容易。但要做到這一點它的簡單:

email = '[email protected]' 
address, domain = email.split('@') 

如果你不關心的第一個和最後每個標記之間的字符數:

"#{address[0]}***#{address[-1]}" 

了一個**的一前@和同樣可以爲域名,但對.字符采用分體式來完成:

working_domain = domain.split('.') 
"#{working_domain[0][0]}***#{working_domain[0][-1]}.#{working_domain[1][0]}*#{working_domain[1][-1]}" 

這是一個非常醜陋的方式來做到這一點,它不是非常乾燥,犯規有關字符計數照顧。你應該能夠將所有這些封裝到一個函數或3中,並使其更簡單易用。

1

從您在問題中提供的示例(「[email protected]」=>「a *** a @ g *** lc * m」),看起來您並不需要*以匹配替換字符的數量。

email = '[email protected]' 
email.gsub(/(?<=[\w\d])[\w\d]+(?=[\w\d])/, "**") 
# => "a**[email protected]**l.c**m" 

打破該正則表達式,只是爲了清晰:[\w\d]+匹配的字母數字字符的字符串,不包括一個字母如果是這樣的話,你可以用一個簡單的正則表達式替換,拆分或解析地址的必要解決這個問題左邊((?<=[\w\d]))和右邊的另一邊((?=[\w\d])),並用「**」替換每個匹配。

我希望這會有所幫助。

相關問題