我找到了'NBAsYouTypeFor事',并参考了提供的演示。但是,我希望电话号码格式化动态当用户输入电话号码在UITextField。
请记住,在我的情况下,地区代码不是固定的一个或两个国家,例如,只有@“美国”或其他。区域代码将由用户从下拉列表中选择,所选代码将由我通过以下行传递:
NBAsYouTypeFormatter *asYouTypeFormatter = [[NBAsYouTypeFormatter alloc] initWithRegionCode:@"US"]; // may be any other than 'US'
NSString *output = [asYouTypeFormatter inputString:@"9999988888"];
现在,当用户在number textfield中键入时,我如何能够动态格式化number textfield?
在UITextField委托的方法中
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *totalString = [NSString stringWithFormat:@"%@%@",textField.text,string];
if (range.length == 1)
{
// Delete button was hit.. so tell the method to delete the last char.
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[\\s-\\(\\)]" options:NSRegularExpressionCaseInsensitive error:&error];
totalString = [regex stringByReplacingMatchesInString:totalString options:0 range:NSMakeRange(0, [totalString length]) withTemplate:@""];
totalString = [totalString substringToIndex:[totalString length] - 1];
}
textField.text = [Utility formatPhoneNumber:totalString countryCode:@"theCountryCode"];
return NO;
}
此功能将根据提供的国家/地区代码将您的字符串格式化为电话格式号码。
+ (NSString *)formatPhoneNumber:(NSString *)simpleNumber countryCode:(NSString *)countryCode
{
if (simpleNumber.length == 0)
{
return @"";
}
NSInteger maxLen = 15;
// use regex to remove non-digits(including spaces) so we are left with just the numbers
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^[0-9+]]" options:NSRegularExpressionCaseInsensitive error:&error];
simpleNumber = [regex stringByReplacingMatchesInString:simpleNumber options:0 range:NSMakeRange(0, [simpleNumber length]) withTemplate:@""];
// check if the number is to long
if (simpleNumber.length > maxLen)
{
// remove last extra chars.
simpleNumber = [simpleNumber substringToIndex:maxLen];
}
NSString *firstChar = @"";
BOOL countryCodeLen = countryCode.length;
if (simpleNumber.length > 0)
{
firstChar = [simpleNumber substringToIndex:1];
}
if ([firstChar isEqualToString:@"+"])
{
//+1 (234)
if (simpleNumber.length < 5 + countryCodeLen)
{
NSString *string = [NSString stringWithFormat:@"(\\d{%d})(\\d+)",countryCodeLen];
// simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:@"(\\d{1})(\\d+)"
simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:string
withString:@"$1 ($2)"
options:NSRegularExpressionSearch
range:NSMakeRange(0, [simpleNumber length])];
}
//+1 (234) 567
else if(simpleNumber.length < 8 + countryCodeLen)
{
NSString *string = [NSString stringWithFormat:@"(\\d{%d})(\\d{3})(\\d+)",countryCodeLen];
// simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:@"(\\d{1})(\\d{3})(\\d+)"
simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:string
withString:@"$1 ($2) $3"
options:NSRegularExpressionSearch
range:NSMakeRange(0, [simpleNumber length])];
}
//+1 (234) 567-
else // else do this one..
{
NSString *string = [NSString stringWithFormat:@"(\\d{%d})(\\d{3})(\\d{3})(\\d+)",countryCodeLen];
// simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:@"(\\d{1})(\\d{3})(\\d{3})(\\d+)"
simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:string
withString:@"$1 ($2) $3-$4"
options:NSRegularExpressionSearch
range:NSMakeRange(0, [simpleNumber length])];
}
}
else
{
// 123 456 7890
// format the number.. if it's less then 7 digits.. then use this regex.
if (simpleNumber.length < 7)
{
simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:@"(\\d{3})(\\d+)"
withString:@"($1) $2"
options:NSRegularExpressionSearch
range:NSMakeRange(0, [simpleNumber length])];
}
else // else do this one..
{
simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:@"(\\d{3})(\\d{3})(\\d+)"
withString:@"($1) $2-$3"
options:NSRegularExpressionSearch
range:NSMakeRange(0, [simpleNumber length])];
}
}
return simpleNumber;
}
希望这有帮助
我是如何做到这一点的。我将从头开始解释。因此,新用户可以从头开始。
从这里下载libPhoneNumber iOS库。在该链接页面的底部,您将找到需要添加到项目中的文件。
你的包应该是这样的:
现在,按照以下步骤执行。
(1)导入视图控制器中需要格式化文本字段的文件。
#import "NBPhoneMetaDataGenerator.h"
#import "NBPhoneNumberUtil.h"
#import "NBAsYouTypeFormatter.h"
并在头文件中创建NBAsYouTypeFor事类型的实例:
NBAsYouTypeFormatter *asYouTypeFormatter;
(2) 在该视图控制器的viewDidLoad方法中,初始化先前获取的对象:
asYouTypeFormatter = [[NBAsYouTypeFormatter alloc] initWithRegionCode:@"IN"];
注:@“IN”代表印度。你可以设置为任何你想要的。请参阅libPhoneNumber iOS库中包含的plist文件,以查看区域代码的完整列表。
(3) 在UITextField的委托方法中,动态管理yout textfield的文本。
#pragma mark
#pragma mark - Phone Number textfield formatting
# define LIMIT 18 // Or whatever you want
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
// Just allow 18 digits
if(!(([string length] + range.location) > LIMIT))
{
// Something entered by user
if(range.length == 0)
{
[textNumber setText:[self.asYouTypeFormatter inputDigit:string]];
}
// Backspace
else if(range.length == 1)
{
[textNumber setText:[self.asYouTypeFormatter removeLastDigit]];
}
}
return NO;
}
希望它能帮助别人!!!
我需要在UITextField中显示电话号码格式作为占位符。我怎么能那样做? 对于国家选择,我使用下面提到的库,它提供了针对用户选择的国家的国旗和国家代码。 https://github.com/NikKovIos/NKVPhonePicker 选择国家后,我需要显示所选国家的电话号码格式,提交该电话号码时,我必须验证电话号码。 我还发现,第三方(PhoneNumberKit)的灵感来源于谷歌的l
我从一个看起来很棒的图书馆听到了很多好消息,但我发现自己处于微妙的境地。 这是我工作过的第一个将电话号码存储在数据库中的项目。 我读过一些关于E.164格式的书,我确实打算用这种格式在我的数据库中存储所有电话号码。 我面临的问题是数据源。我无法控制数据源。我只知道我收到了一堆电话号码,它们的格式不一致。有些有国际延伸,有些没有。有些有括号、连字符、前导0等。有些没有。 我如何可能从上述来源提取电话
问题内容: 一旦用户开始将电话号码键入此格式类型,并且我可以正常工作,我就在格式化文本文件中的文本,但是一旦我从服务器上获得了电话号码,我就这样得到了,所以请您告诉我如何编辑它我从服务器获得相同格式的文件吗? 输入开始后的代码: 问题答案: 用String中的字符进行操作不是很简单。您需要遵循以下条件: 斯威夫特2.1 雨燕2.0 代码将打印
问题内容: 我正在使用 SMS应用程序 ,需要能够将发件人的电话号码从 +11234567890转换 为 123-456-7890, 以便可以将其与 MySQL数据库中的 记录进行比较。 数字以后一种格式存储,可在网站上的其他地方使用,我宁愿不更改该格式,因为它将需要修改大量代码。 我将如何使用PHP? 谢谢! 问题答案:
在Github上libphonenumber提供的文档中,有一个演示,它将提供的任何数字转换为国际格式,例如转换为 我想在C#中使用相同的功能。 在libphone的文档中,需要解析号码并提供国家/地区。但是,演示在不提供地区/国家信息的情况下工作。有人能告诉我是怎么做的吗?
问题内容: 我想知道如何使用angularjs指令在输入字段中自动设置数字格式?在输入字段中输入6042919283时,我希望它显示为604-291-9283。 谢谢 问题答案: 您可以使用UI Utils遮罩。 它允许您定义允许的输入格式,并将为您处理验证以及格式设置