簡體   English   中英

在2個特定字符之間替換字符串字符

[英]Replace string characters between 2 specific characters

我正在嘗試清理NSString以刪除電子郵件,以刪除域名。

所以說

“ testEmail@gmail.com”

將需要

“ testEmail@****.com”

要么

testEmail @ **** (我還需要一種方法來替換“ @”之后的所有字符

但對於任何域變化。

如果有人有簡單的解決方案,我將不勝感激。

謝謝!

這絕不是防彈,但比以前的答案要強一些。

- (NSString *)sanitizedStringForEmailAddress:(NSString *)address elideEntireDomain:(BOOL)elideEntireDomain
{
    NSRange asperandRange = [address rangeOfString:@"@" options:NSBackwardsSearch];
    NSRange domainRange = [address rangeOfString:@"." options:NSBackwardsSearch];

    if (asperandRange.location != NSNotFound &&
        domainRange.location != NSNotFound &&
        asperandRange.location < domainRange.location)
    {
        NSRange elisionRange = NSMakeRange(asperandRange.location + 1, domainRange.location - asperandRange.location - 1);
        if (elideEntireDomain)
        {
            elisionRange.length = address.length - asperandRange.location - 1;
        }

        NSString *elisionString = @"****";

        return [address stringByReplacingCharactersInRange:elisionRange withString:elisionString];
    }

    return nil;
}

請記住,根據RFC 2822,只要引用本地部分,對包含“ @”的電子郵件地址的“本地”部分就沒有限制。

這應該可以解決問題,將成為一個不錯的類別方法。

- (NSString *)stringByReplacingEmailDomainWithAsterisks:(NSString *)emailAddress
{
    NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"@."];
    NSArray *allComponents = [emailAddress componentsSeparatedByCharactersInSet:charSet];

    NSMutableString *newString = [NSMutableString new];
    [newString appendFormat:@"%@@", [allComponents firstObject]];

    NSRange range = NSMakeRange(0, 1);
    for (__unused int i = range.location; range.location < [allComponents[1] length]; range.location++) {
        [newString appendString:@"*"];
    }
    [newString appendFormat:@".%@", allComponents[2]];

    return [NSString stringWithFormat:@"%@", newString];
}

例:

NSString *someEmail = @"This_isAtest@wipeOut.com";

NSLog(@"%@", [self stringByReplacingEmailDomainWithAsterisks:someEmail]);

返回值:

This_isAtest@*******.com

編輯:您需要添加一些錯誤檢查,以確保您獲得了不錯的字符串/電子郵件等。

string email = "testEmail@gmail.com";
int atIndex = email.IndexOf('@');
string scrubbed = email.substring(0, atIndex + 1) + "****.com"

它將捕獲所有字符,直到@,然后將“ ****。com”附加到末尾。

用4個星號替換域:

NSString *email = @"testEmail@gmail.com";

NSRange at = [email rangeOfString:@"@"];
NSRange com = [email rangeOfString:@".com"];
email = [email stringByReplacingCharactersInRange:NSMakeRange(at.location + at.length, com.location - at.location - at.length) withString:@"****"];

並替換@之后的所有內容:

NSString *email = @"testEmail@gmail.com";

NSRange at = [email rangeOfString:@"@"];
email = [email stringByReplacingCharactersInRange:NSMakeRange(at.location + at.length, email.length - at.location - at.length) withString:@"****"];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM