2016-09-06 33 views
0

我需要實時進行格式化和更新UITextField以匹配給定的正則表達式當用戶正在輸入並預填充適當的字符(例如連字符)時。根據正則表達式動態設置電話號碼

例如:當格式應該###-###-####和正則表達式^\d{3}-\d{3}-\d{4}$,然後連字符應添加到UITextField動態,以後輸入的第三和第七位。

將來必須對不同的正則表達式進行擴展。

任何想法如何做到這一點?

+1

您可以檢查https://github.com/Serheo/SHSPhoneComponent委託方法。 我已經使用過它,但格式應該在「#」中給出。除#以外,我們可能需要檢查代碼並進行相應的修改。 – Janmenjaya

+0

這個庫很棒,謝謝。 – krlb

回答

0

你應該在UITextField委託方法shouldChangeCharactersInRange一看,你可以把條件它是當前range.location3 or 7然後添加hyphen在那個地方,旁邊添加當前字符串吧!

+0

是的,但我需要根據正則表達式添加連字符。如果正則表達式改變,那麼連字符的地方也會改變。 – krlb

0

您可以使用此代碼添加了文本框

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSInteger moddedLength = textField.text.length-(range.length-string.length); 
    if (moddedLength >= 13) { 
     return NO; 
    } 
    if (range.length == 0 &&![[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[string characterAtIndex:0]]) { 
     return NO; 
    } 
    if ([self range:range ContainsLocation:3] || [self range:range ContainsLocation:7]|| [self range:range ContainsLocation:9]) 
    { 
     textField.text = [self formatPhoneString:[textField.text stringByReplacingCharactersInRange:range withString:string]]; 
     return NO; 
    } 
    return YES; 
} 

添加了這個格式化方法

-(NSString*) formatPhoneString:(NSString*) preFormatted 
{ 
    NSString* workingString = [preFormatted stringByReplacingOccurrencesOfString:@"-" withString:@""]; 
    if(workingString.length > 3) { 
     workingString = [workingString stringByReplacingCharactersInRange:NSMakeRange(3, 0) withString:@"-"]; 
    } 
    if(workingString.length > 7) 
    { 
     workingString = [workingString stringByReplacingCharactersInRange:NSMakeRange(7, 0) withString:@"-"]; 
    } 
    if(workingString.length >11) 
    { 
     workingString = [workingString stringByReplacingCharactersInRange:NSMakeRange(3, 0) withString:@"-"]; 
    } 
    return workingString; 

} 

-(bool) range:(NSRange) range ContainsLocation:(NSInteger) location { 
    if(range.location <= location && range.location+range.length >= location) 
    { 
     return true; 
    } 
    return false; 
} 
+0

謝謝,但我需要它與正則表達式一起工作。該解決方案僅適用於一種情況。 – krlb

+0

你可以使用它可能是這個正則表達式的工作。 @「^ \\ d {3} [ - ] \\ d {3} [ - ] \\ d {4} $」 –

+0

是的,但是其他的呢?我需要它與許多不同的正則表達式一起工作。不只一個。 – krlb