电子邮件屏蔽 Regex Kotlin

Email masking Regex Kotlin

全部。我想屏蔽电子邮件,但遇到了一点问题。

My code

val email = lucyrocher@gmail.com
val p = """^([^@]{2})([^@]+)""".toRegex()
val result = email.replace(p) {
 it.groupValues[1] + "*".repeat(it.groupValues[2].length)
}

expected result : mask with * for first two letters && first four letters after @

lu********@****l.com

current result : can mask before @ but not after it

lu********@gmail.com

如何屏蔽@后的前4个字母?

对于以后post看到这个的人,我在这里分享我的代码。

Email Mask : lu********@****l.com

val regex = """^([^@]{2})([^@]+)([^@]{0}@)([^@]{4})""".toRegex()
val emailMask = args.biometricOtp.otpData.replace(regex) {
    it.groupValues[1] + "*".repeat(it.groupValues[2].length) 
  + it.groupValues[3] + "*".repeat(it.groupValues[4].length) }

Phone number Mask : 82103*******

val regex = """([^@]{5})([^@]+)""".toRegex()
val smsMask = args.biometricOtp.otpData.replace(regex) {
    it.groupValues[1] + "*".repeat(it.groupValues[2].length) }

您可以用符合以下模式的 * 替换所有字符:

(?:\G(?!^)|(?<=^[^@]{2}|@))[^@](?!\.[^.]+$)

regex demo详情:

  • (?:\G(?!^)|(?<=^[^@]{2}|@)) - 匹配 @(与 @),或字符串的开头和 @ 以外的任何两个字符(与 (?<=^[^@]{2}),或上一次成功匹配的结尾(\G(?!^)
  • [^@] - @
  • 以外的任何一个字符
  • (?!\.[^.]+$) - 后面没有紧跟 . ,然后是 . 以外的一个或多个字符,直到字符串结束。

参见 Kotlin demo:

val regex = """(?:\G(?!^)|(?<=^[^@]{2}|@))[^@](?!\.[^.]+$)""".toRegex()
val email = "lucyrocher@gmail.com"
val emailMask = email.replace(regex, "*")
print(emailMask)
// => lu********@****l.com