/**
* Format email id in the following format
* (m••••••n@gmail.com)
* only exception for 2 character username in that case it will be ••@gmail.com
* @return formatted email
*/
fun String.maskEmailId(): String {
return if (this.isNotNullOrEmpty() && this.indexOf('@') > 0) {
val index = this.indexOf('@')
val maskedUsername = if (index > 2) {
"${this.substring(0, 1)}${"*".repeat(index-2)}${this.substring(index-1)}"
} else {
"*".repeat(index) + this.substring(index)
}
maskedUsername
} else ""
}
7条答案
按热度按时间55ooxyrt1#
您的前瞻
(?=[^@]*?.@)
需要在@
之前至少有1个字符(请参见@
之前的点)。如果删除它,将替换所有预期的符号:
字符串
这里是the regex demo(替换为
*
)。但是,该正则表达式不是任务的正确正则表达式。你需要一个正则表达式来匹配前3个字符之后的每个字符,直到第一个
@
:型
参见another regex demo,替换为
$1*
。这里,[^@]
匹配任何不是@
的字符,所以我们不匹配像abc@example.com
这样的地址。只有那些电子邮件将被屏蔽,有4+字符的用户名部分。参见IDEONE demo:
型
dtcbnfnu2#
如果你不擅长正则表达式,不要使用它们:)我不知道你是否听过这句话:
有些人在遇到问题时会想“我知道,我会用正则表达式。”
(source)
您可能会在这里得到一个工作的正则表达式,但您今天能理解它吗?明天?六个月后?你的同事会吗?
一个简单的替代方案是使用
StringBuilder
,我认为理解这里发生的事情要简单得多:字符串
从第三个字符开始,将字符替换为
*
,直到到达字符串结尾或@
。(You甚至不需要使用
StringBuilder
:你可以简单地操作email.toCharArray()
的元素,然后在末尾构造一个新的字符串)。当然,这不适用于本地部分短于3个字符的电子邮件地址-它实际上会屏蔽域。
1zmg4dgp3#
你的前瞻性有点复杂试试这个代码:
字符串
O/P:
型
eit6fx6z4#
字符串
ttisahbt5#
我喜欢这个,因为我只想隐藏4个字符,如果电子邮件地址太短,它也会动态地将隐藏的字符减少到2:
字符串
样本输出:
型
yizd12fk6#
字符串
vlurs2pr7#
Kotlin扩展
字符串