我需要實時進行格式化和更新UITextField
以匹配給定的正則表達式當用戶正在輸入並預填充適當的字符(例如連字符)時。根據正則表達式動態設置電話號碼
例如:當格式應該###-###-####
和正則表達式^\d{3}-\d{3}-\d{4}$
,然後連字符應添加到UITextField
動態,以後輸入的第三和第七位。
將來必須對不同的正則表達式進行擴展。
任何想法如何做到這一點?
我需要實時進行格式化和更新UITextField
以匹配給定的正則表達式當用戶正在輸入並預填充適當的字符(例如連字符)時。根據正則表達式動態設置電話號碼
例如:當格式應該###-###-####
和正則表達式^\d{3}-\d{3}-\d{4}$
,然後連字符應添加到UITextField
動態,以後輸入的第三和第七位。
將來必須對不同的正則表達式進行擴展。
任何想法如何做到這一點?
你應該在UITextField
委託方法shouldChangeCharactersInRange
一看,你可以把條件它是當前range.location
是3 or 7
然後添加hyphen
在那個地方,旁邊添加當前字符串吧!
是的,但我需要根據正則表達式添加連字符。如果正則表達式改變,那麼連字符的地方也會改變。 – krlb
您可以使用此代碼添加了文本框
- (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;
}
您可以檢查https://github.com/Serheo/SHSPhoneComponent委託方法。 我已經使用過它,但格式應該在「#」中給出。除#以外,我們可能需要檢查代碼並進行相應的修改。 – Janmenjaya
這個庫很棒,謝謝。 – krlb