- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我已经有一段时间没有发布这个问题了,因为我必须处理几种情况。基本上,我们的应用程序使用 Twilio 向用户的手机发送带有验证码的短信,以确认他们确实拥有该设备。我们很高兴 Twilio 作为一个整体可以接受国际电话号码。然而,本地设备上存在几个大问题,目前我们认为我们应该只支持/保证美国电话#s。但这就是我问这个问题的原因,看看您是否可以为我指明更好的方向。
所以问题出在以下场景: 大多数用户在添加联系人时没有输入+和国家代码;又名正确的格式,Twilio 期望在请求正文中为:+15555555555。我们的“解决方案”是从 iOS 通讯录中的电话号码中去除所有垃圾字符,例如 ()#+*-
和空格。然后我们在清理后的 NSString
前面添加一个 +1,这使得电话#现在是美国电话#,这对于其他国家的其他用户来说是不正确的。我们的大多数用户将是美国公民,但这不是我们不妥善解决此问题的借口。即使用户是“好”用户并使用 + 和国家代码正确格式化他们的联系人,我们也必须忽略它,因为不幸的是大多数人不会正确格式化。
我也不认为获取设备的区域设置是最佳解决方案。当然,必须有一种更简单、更好的方法来做到这一点,而不是对用户的位置做出任何假设?如果是这样,您能否发布一些建议?
NSDictionary *dictCodes = [NSDictionary dictionaryWithObjectsAndKeys:@"972", @"IL",
@"93", @"AF", @"355", @"AL", @"213", @"DZ", @"1", @"AS",
@"376", @"AD", @"244", @"AO", @"1", @"AI", @"1", @"AG",
@"54", @"AR", @"374", @"AM", @"297", @"AW", @"61", @"AU",
@"43", @"AT", @"994", @"AZ", @"1", @"BS", @"973", @"BH",
@"880", @"BD", @"1", @"BB", @"375", @"BY", @"32", @"BE",
@"501", @"BZ", @"229", @"BJ", @"1", @"BM", @"975", @"BT",
@"387", @"BA", @"267", @"BW", @"55", @"BR", @"246", @"IO",
@"359", @"BG", @"226", @"BF", @"257", @"BI", @"855", @"KH",
@"237", @"CM", @"1", @"CA", @"238", @"CV", @"345", @"KY",
@"236", @"CF", @"235", @"TD", @"56", @"CL", @"86", @"CN",
@"61", @"CX", @"57", @"CO", @"269", @"KM", @"242", @"CG",
@"682", @"CK", @"506", @"CR", @"385", @"HR", @"53", @"CU",
@"537", @"CY", @"420", @"CZ", @"45", @"DK", @"253", @"DJ",
@"1", @"DM", @"1", @"DO", @"593", @"EC", @"20", @"EG",
@"503", @"SV", @"240", @"GQ", @"291", @"ER", @"372", @"EE",
@"251", @"ET", @"298", @"FO", @"679", @"FJ", @"358", @"FI",
@"33", @"FR", @"594", @"GF", @"689", @"PF", @"241", @"GA",
@"220", @"GM", @"995", @"GE", @"49", @"DE", @"233", @"GH",
@"350", @"GI", @"30", @"GR", @"299", @"GL", @"1", @"GD",
@"590", @"GP", @"1", @"GU", @"502", @"GT", @"224", @"GN",
@"245", @"GW", @"595", @"GY", @"509", @"HT", @"504", @"HN",
@"36", @"HU", @"354", @"IS", @"91", @"IN", @"62", @"ID",
@"964", @"IQ", @"353", @"IE", @"972", @"IL", @"39", @"IT",
@"1", @"JM", @"81", @"JP", @"962", @"JO", @"77", @"KZ",
@"254", @"KE", @"686", @"KI", @"965", @"KW", @"996", @"KG",
@"371", @"LV", @"961", @"LB", @"266", @"LS", @"231", @"LR",
@"423", @"LI", @"370", @"LT", @"352", @"LU", @"261", @"MG",
@"265", @"MW", @"60", @"MY", @"960", @"MV", @"223", @"ML",
@"356", @"MT", @"692", @"MH", @"596", @"MQ", @"222", @"MR",
@"230", @"MU", @"262", @"YT", @"52", @"MX", @"377", @"MC",
@"976", @"MN", @"382", @"ME", @"1", @"MS", @"212", @"MA",
@"95", @"MM", @"264", @"NA", @"674", @"NR", @"977", @"NP",
@"31", @"NL", @"599", @"AN", @"687", @"NC", @"64", @"NZ",
@"505", @"NI", @"227", @"NE", @"234", @"NG", @"683", @"NU",
@"672", @"NF", @"1", @"MP", @"47", @"NO", @"968", @"OM",
@"92", @"PK", @"680", @"PW", @"507", @"PA", @"675", @"PG",
@"595", @"PY", @"51", @"PE", @"63", @"PH", @"48", @"PL",
@"351", @"PT", @"1", @"PR", @"974", @"QA", @"40", @"RO",
@"250", @"RW", @"685", @"WS", @"378", @"SM", @"966", @"SA",
@"221", @"SN", @"381", @"RS", @"248", @"SC", @"232", @"SL",
@"65", @"SG", @"421", @"SK", @"386", @"SI", @"677", @"SB",
@"27", @"ZA", @"500", @"GS", @"34", @"ES", @"94", @"LK",
@"249", @"SD", @"597", @"SR", @"268", @"SZ", @"46", @"SE",
@"41", @"CH", @"992", @"TJ", @"66", @"TH", @"228", @"TG",
@"690", @"TK", @"676", @"TO", @"1", @"TT", @"216", @"TN",
@"90", @"TR", @"993", @"TM", @"1", @"TC", @"688", @"TV",
@"256", @"UG", @"380", @"UA", @"971", @"AE", @"44", @"GB",
@"1", @"US", @"598", @"UY", @"998", @"UZ", @"678", @"VU",
@"681", @"WF", @"967", @"YE", @"260", @"ZM", @"263", @"ZW",
@"591", @"BO", @"673", @"BN", @"61", @"CC", @"243", @"CD",
@"225", @"CI", @"500", @"FK", @"44", @"GG", @"379", @"VA",
@"852", @"HK", @"98", @"IR", @"44", @"IM", @"44", @"JE",
@"850", @"KP", @"82", @"KR", @"856", @"LA", @"218", @"LY",
@"853", @"MO", @"389", @"MK", @"691", @"FM", @"373", @"MD",
@"258", @"MZ", @"970", @"PS", @"872", @"PN", @"262", @"RE",
@"7", @"RU", @"590", @"BL", @"290", @"SH", @"1", @"KN",
@"1", @"LC", @"590", @"MF", @"508", @"PM", @"1", @"VC",
@"239", @"ST", @"252", @"SO", @"47", @"SJ", @"963", @"SY",
@"886", @"TW", @"255", @"TZ", @"670", @"TL", @"58", @"VE",
@"84", @"VN", @"1", @"VG", @"1", @"VI", nil];
NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey:NSLocaleCountryCode];
NSString *callingCode = [dictCodes objectForKey:countryCode];
NSCharacterSet *validCharacters = [[NSCharacterSet characterSetWithCharactersInString:@"+0123456789"]invertedSet];
for (NSString *sub in mutablePhonesArray)
{
NSString *newString = [[sub componentsSeparatedByCharactersInSet:validCharacters]componentsJoinedByString:@""];
NSString *newString2 = newString;
if (![newString hasPrefix:@"+"])
{
newString2 = [NSString stringWithFormat:@"+%@%@",callingCode,newString];
}
NSString *substring = [newString2 substringFromIndex:1];
NSString *removeExtraPlusSigns = [substring stringByReplacingOccurrencesOfString:@"+" withString:@""];
NSString *finalPhone = [NSString stringWithFormat:@"+%@",removeExtraPlusSigns];
[newPhoneArray addObject:finalPhone];
}
最佳答案
要找到调用前缀,首先通过 NSLocale
类访问用户当前的语言环境。请注意,这不需要任何额外的权限或私有(private) API。
NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];
NSString *callingCode = [dictCodes objectForKey:countryCode];
使用国家代码从所有 ISO 国家代码的硬编码 NSDictionary
和我在下面包含的相应调用代码中检索相关调用代码。
NSDictionary *dictCodes = [NSDictionary dictionaryWithObjectsAndKeys:@"972", @"IL",
@"93", @"AF", @"355", @"AL", @"213", @"DZ", @"1", @"AS",
@"376", @"AD", @"244", @"AO", @"1", @"AI", @"1", @"AG",
@"54", @"AR", @"374", @"AM", @"297", @"AW", @"61", @"AU",
@"43", @"AT", @"994", @"AZ", @"1", @"BS", @"973", @"BH",
@"880", @"BD", @"1", @"BB", @"375", @"BY", @"32", @"BE",
@"501", @"BZ", @"229", @"BJ", @"1", @"BM", @"975", @"BT",
@"387", @"BA", @"267", @"BW", @"55", @"BR", @"246", @"IO",
@"359", @"BG", @"226", @"BF", @"257", @"BI", @"855", @"KH",
@"237", @"CM", @"1", @"CA", @"238", @"CV", @"345", @"KY",
@"236", @"CF", @"235", @"TD", @"56", @"CL", @"86", @"CN",
@"61", @"CX", @"57", @"CO", @"269", @"KM", @"242", @"CG",
@"682", @"CK", @"506", @"CR", @"385", @"HR", @"53", @"CU",
@"537", @"CY", @"420", @"CZ", @"45", @"DK", @"253", @"DJ",
@"1", @"DM", @"1", @"DO", @"593", @"EC", @"20", @"EG",
@"503", @"SV", @"240", @"GQ", @"291", @"ER", @"372", @"EE",
@"251", @"ET", @"298", @"FO", @"679", @"FJ", @"358", @"FI",
@"33", @"FR", @"594", @"GF", @"689", @"PF", @"241", @"GA",
@"220", @"GM", @"995", @"GE", @"49", @"DE", @"233", @"GH",
@"350", @"GI", @"30", @"GR", @"299", @"GL", @"1", @"GD",
@"590", @"GP", @"1", @"GU", @"502", @"GT", @"224", @"GN",
@"245", @"GW", @"595", @"GY", @"509", @"HT", @"504", @"HN",
@"36", @"HU", @"354", @"IS", @"91", @"IN", @"62", @"ID",
@"964", @"IQ", @"353", @"IE", @"972", @"IL", @"39", @"IT",
@"1", @"JM", @"81", @"JP", @"962", @"JO", @"77", @"KZ",
@"254", @"KE", @"686", @"KI", @"965", @"KW", @"996", @"KG",
@"371", @"LV", @"961", @"LB", @"266", @"LS", @"231", @"LR",
@"423", @"LI", @"370", @"LT", @"352", @"LU", @"261", @"MG",
@"265", @"MW", @"60", @"MY", @"960", @"MV", @"223", @"ML",
@"356", @"MT", @"692", @"MH", @"596", @"MQ", @"222", @"MR",
@"230", @"MU", @"262", @"YT", @"52", @"MX", @"377", @"MC",
@"976", @"MN", @"382", @"ME", @"1", @"MS", @"212", @"MA",
@"95", @"MM", @"264", @"NA", @"674", @"NR", @"977", @"NP",
@"31", @"NL", @"599", @"AN", @"687", @"NC", @"64", @"NZ",
@"505", @"NI", @"227", @"NE", @"234", @"NG", @"683", @"NU",
@"672", @"NF", @"1", @"MP", @"47", @"NO", @"968", @"OM",
@"92", @"PK", @"680", @"PW", @"507", @"PA", @"675", @"PG",
@"595", @"PY", @"51", @"PE", @"63", @"PH", @"48", @"PL",
@"351", @"PT", @"1", @"PR", @"974", @"QA", @"40", @"RO",
@"250", @"RW", @"685", @"WS", @"378", @"SM", @"966", @"SA",
@"221", @"SN", @"381", @"RS", @"248", @"SC", @"232", @"SL",
@"65", @"SG", @"421", @"SK", @"386", @"SI", @"677", @"SB",
@"27", @"ZA", @"500", @"GS", @"34", @"ES", @"94", @"LK",
@"249", @"SD", @"597", @"SR", @"268", @"SZ", @"46", @"SE",
@"41", @"CH", @"992", @"TJ", @"66", @"TH", @"228", @"TG",
@"690", @"TK", @"676", @"TO", @"1", @"TT", @"216", @"TN",
@"90", @"TR", @"993", @"TM", @"1", @"TC", @"688", @"TV",
@"256", @"UG", @"380", @"UA", @"971", @"AE", @"44", @"GB",
@"1", @"US", @"598", @"UY", @"998", @"UZ", @"678", @"VU",
@"681", @"WF", @"967", @"YE", @"260", @"ZM", @"263", @"ZW",
@"591", @"BO", @"673", @"BN", @"61", @"CC", @"243", @"CD",
@"225", @"CI", @"500", @"FK", @"44", @"GG", @"379", @"VA",
@"852", @"HK", @"98", @"IR", @"44", @"IM", @"44", @"JE",
@"850", @"KP", @"82", @"KR", @"856", @"LA", @"218", @"LY",
@"853", @"MO", @"389", @"MK", @"691", @"FM", @"373", @"MD",
@"258", @"MZ", @"970", @"PS", @"872", @"PN", @"262", @"RE",
@"7", @"RU", @"590", @"BL", @"290", @"SH", @"1", @"KN",
@"1", @"LC", @"590", @"MF", @"508", @"PM", @"1", @"VC",
@"239", @"ST", @"252", @"SO", @"47", @"SJ", @"963", @"SY",
@"886", @"TW", @"255", @"TZ", @"670", @"TL", @"58", @"VE",
@"84", @"VN", @"1", @"VG", @"1", @"VI", nil];
关于ios - 处理国际电话号码和不正确的通讯录格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24769628/
我需要一个正则表达式来匹配所有标点符号,例如标准的 [,!@#$%^&*()],但包括国际标记,例如倒置的西类牙语问号、中文句号等.我的 google-fu 快用完了。有人手头有这样一个与 Javas
跟进之前的 question我有关于水平数组和垂直数组的问题,我对它们各自的分隔符有疑问。 问题定义: 这里是比较两个数组的错误方法的示例: {=SUMPRODUCT(--({"Apple","Pea
我正在尝试对手机号码进行验证检查,有点类似于 gmail 的实现。 Gmail signup page link 但是各个国家/地区的电话号码差异很大,因此很难为此构建正则表达式。 我在这里查看了一些
这就是我们所拥有的: 数据库中的用户,包括 phone_number 字段。当用户创建他们的帐户时,他们必须输入他们的电话号码。我们可以要求特定的格式,我们会这样做: + [countrycode]
对于Google-Chrome扩展程序,我想在所有Google页面上加载内容脚本。做这个的最好方式是什么? 我在manifest.json中尝试了此操作,但它不起作用: "matches": ["ht
在 JavaScript 中使用数字格式化程序时,是否可以在值之前使用欧元符号来格式化值? this.formatter = new Intl.NumberFormat('nl-be', { st
我们有一个 iOS 应用程序,在美国拥有数百万用户,需要国际化并在 11 个不同的国家/地区(许多国家/地区使用不同的语言)提供。已制定出适用于特定国家/地区以及不同货币等的公开隐藏功能的所有技术细节
如何在使用 react-intl 时使用 来控制断字。我有一条像 Rs 这样的消息。 100,00,000 但它正在打破卢比。无论如何可以将消息写为 Rs. 100,00,000当我尝试这样做时,
我正在研究具有端点的 swagger API 规范: /authorizations 我也想为这个端点定义一个替代拼写(授权)。这可能吗?或者我是否需要为每个拼写定义一个单独的路由? /authori
我正在研究具有端点的 swagger API 规范: /authorizations 我也想为这个端点定义一个替代拼写(授权)。这可能吗?或者我是否需要为每个拼写定义一个单独的路由? /authori
我正在尝试安装 CakePHP 3-0-0 版本并且我已经从 here 下载了源代码.但它显示启用 intl 扩展 的错误。因为我已经在 php.ini 文件中将 ;extension=php_int
#include #include #include int main() { const wchar_t *str = L"\u041F\u043E\u0440\u044F\u0434
Transliterator::listIDs()将列出 ID,但显然它不是完整列表。 在example from this page ,ID 看起来像: Any-Latin; NFD; [:Nons
任务是在不同的语言环境中显示订阅价格,例如 5$/month。 我可以用 Intl 管理价格部分很好,但坚持时间段翻译部分。 我可以使用自己的翻译字符串,但如果可能,我更愿意使用默认的 Intl 版本
任务是在不同的语言环境中显示订阅价格,例如 5$/month。 我可以用 Intl 管理价格部分很好,但坚持时间段翻译部分。 我可以使用自己的翻译字符串,但如果可能,我更愿意使用默认的 Intl 版本
我正在使用 React 制作一个多语言通用应用程序,但我很难找到处理区域设置数据的最佳方法。该应用程序将提供 16 种语言版本,并且翻译的消息量非常大,因此我无法将所有消息加载到一个大 json 中(
我是一名优秀的程序员,十分优秀!