Visual Basic替换电子邮件地址中的某些字符以保护隐私

时间:2017-11-01 10:02:00

标签: regex vb.net vba

我有以下代码将从文本字符串中提取电子邮件地址,该字符串将被数据库字段中的文本替换。

该字符串将包含一个电子邮件地址。我已将电子邮件地址拆分如下:

  1. test@test.co.za - 完整的电子邮件地址
  2. 测试 - 电子邮件用户
  3. test.co.za - 域名
  4. 我已经包含了可以将所有字符替换为***************(完整电子邮件)或单个部分的代码。

    当我完成所需的工作时,再次合并文本会很容易。

    我想要得到的结果:

    te ** @ ******** za

    考虑隐藏第一部分中的所有内容,除了前两个字符,最后一部分,除了最后两个字符之外的所有内容。

    Dim newText As string = ""
    
    Dim senText As String = "This is a long string that we will try test@test.co.za to extract the email address from, it might exist anywhere in this string."
    Dim emailRegEx As New Regex("(\S+)@([^\.\s]+)(?:\.([^\.\s]+))+")
    Dim m As Match = emailRegEx.Match(senText)
    If m.Success Then
        newText = m.ToString
    End If
    
    Dim mystr As String = newText
    Dim cut_at As String = "@"
    Dim x As Integer = InStr(mystr, cut_at)
    
    Dim string_before As String = mystr.Substring(0, x - 1)
    Dim string_after As String = mystr.Substring(x + cut_at.Length - 1)
    
    Dim myString As String = New String("*"c, newText.Length)
    
    Dim PrivateMail As String = ""
    
    response.write(newText)
    response.write(myString)
    response.write(string_before)
    response.write(string_after)
    

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

也许试试这个:

Dim email = "test@test.co.za"

Dim obsfucated = _
    String.Join("@", email.Split("@"c).Select(Function(x, n) _
        If(n = 0, _
            x.Substring(0, System.Math.Min(2, x.Length)).PadRight(x.Length, "*"c), _
            x.Substring(x.Length - 2, 2).PadLeft(x.Length, "*"c))))

Console.WriteLine(obsfucated)

它给出:te**@********za

答案 1 :(得分:0)

在当前电子邮件用户子字符串中设置带有嵌套子字符串的模式。将****过滤器仅应用于子字符串的嵌套部分。

Dim emailRegEx As New Regex("(\S{1,2}(\S*))@([^\.\s]+)(?:\.([^\.\s]+))+")

有关正则表达式中嵌套的子串的详细信息,请参阅Here