iOS 上的电话号码格式
我有一个文本字段,用户在其中输入数据。这是一个电话号码字段。如果用户输入 1234567890
,我希望它在用户键入时显示为 (123)-(456)-7890
。这怎么可能?
I have a text field where the user enters data. It's a phone number field. If the user enters 1234567890
, I want it displayed as (123)-(456)-7890
as the user types. How is this possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(23)
这将帮助您
格式化 (xxx) xxx-xxxx
This will help you
Format (xxx) xxx-xxxx
这感觉更清晰,并且可以更好地删除任何不需要的字符。 1 (###) ###‑#### 或 (###) ###‑#### 格式正确
This felt more clear and handles removing any unwanted characters much more nicely. Formats correctly for 1 (###) ###‑#### or (###) ###‑####
下面的代码是我通常使用的。格式不同,但你明白了。这将处理诸如“123df#$@$gdfg45-+678dfg901”之类的输入并输出“1 (234) 567-8901”
The code bellow is what I typically use. The format is different but you get the picture. This will handle input such as '123df#$@$gdfg45-+678dfg901' and output '1 (234) 567-8901'
我们在这里为电话号码编写了一个自定义的 NSFormatter 子类: https://github.com/edgecase/PhoneNumberFormatter
您可以像任何其他一样使用它其他 NSFormatter 子类。
We wrote a custom NSFormatter subclass for phone numbers here: https://github.com/edgecase/PhoneNumberFormatter
You can use it like any other NSFormatter subclass.
非常感谢您的第一个答案,但是我认为该方法
-(int)getLength:(NSString*)mobileNumber
是无用的。您可以尝试如下所示:Thanks so much for the first answer but, i think, that method
-(int)getLength:(NSString*)mobileNumber
is useless. You can try something like below:对于需要国际号码格式的用户:https://code.google.com/p/libphonenumber/
带有 C++、Java 和 JavaScript 实现。应该很容易将 C++ 实现包装在 .mm 文件中,并在其周围编写一个小的 Objective-C 包装器。
For those of you who require international number formatting: https://code.google.com/p/libphonenumber/
Comes with C++, Java and JavaScript implementations. Should be easy to wrap the C++ implementations in a .mm file and write a small Objective-C wrapper around it.
有效选项是 https://github.com/iziz/libPhoneNumber-iOS
所有其他答案仅涵盖可能性和组合的一小部分,该库实际上解析和验证每个电话号码,并识别:
A valid option is https://github.com/iziz/libPhoneNumber-iOS
All the other answer cover only a small part of the possibilities and combinations, this library actually parse and validate EVERY phone number, and identify:
与美国电话号码相关:
在 @wan 的帖子中添加了一条条件语句(如果用户以国家/地区代码 (1) 开头)。这样,它的格式将是:1 (XXX) XXX-XXXX 而不是 (1XX) XXX-XXXX。
Relevant for U.S. Phone Numbers:
Adding to @wan's post, I added a conditional statement if the user starts with the country code (1). That way, it will format to be: 1 (XXX) XXX-XXXX instead of (1XX) XXX-XXXX.
也许你可以使用这个简单的方法:
假设上面的方法是在
Contact
类中,只需使用这样的方法:这将导致类似的结果:
Maybe you could use this simple method:
Assuming above method is in
Contact
class, just use the method like this:That would be resulting something like:
您可以使用 AKNumericFormatter 库。它有格式化程序和方便的 UITextField 类别,它可以作为 cocoapod 提供。
You can use AKNumericFormatterlibrary for it. It has formatter and convenient UITextField category, it's available as a cocoapod.
下面是关于如何在 iOS 中进行手机格式化的最全面的答案的 C# Xamarin.iOS 版本
C# Xamarin.iOS version of most comprehensive answer on how to do phone formatting in iOS is below
另外对于格式 +x (xxx) xxx-xx-xx 您可以使用类似以下简单的解决方案:
Also for format +x (xxx) xxx-xx-xx you can use something like this simple solution:
迅速
SWIFT
Swift 格式的电话号码
改进了反对者 @datinc 的答案,
例如
1123df#$@$gdfg45-+678dfg901
的输入将输出为+11(234)567-8901
Swift Formatted Phone Number
Improves oppon @datinc's answer,
input such as
1123df#$@$gdfg45-+678dfg901
will be output as+11(234)567-8901
这将帮助您
将 (xxx) xxx-xxxx 格式化为 SWIFT 3.0
This will help you
Format (xxx) xxx-xxxx For SWIFT 3.0
所以这个方法将格式化为 (xxx) xxx - xxxx ....
它是对当前最佳答案的修改并处理退格键
希望它有帮助
So this method will format for (xxx) xxx - xxxx ....
it is a modification of the current top answer and handles backspaces
hope it helps
REFormattedNumberField 可能是最好的。只需提供您想要的格式即可。
REFormattedNumberField is probably the best. Just supply a format you wish.
的格式
这是一个简单的类别,它将模仿输入示例使用
Here's a simple category which will mimic the format of the input
example use
否则,三个一组。要调整组的大小,请更改分配给 substrsize 的值
Otherwise, groups of three. To adjust the size of the groups, change the value assigned to substrsize
在 SWIFT 3
Swift 3 string.index.advancedBy(3) 中:
In SWIFT 3
Swift 3 string.index.advancedBy(3) alternate:
首先,将
UITextFieldDelegate
添加到您的.h
文件中,并在nib
文件中委托您的UITextField
。其次,将此代码添加到您的
.m
文件中:First, add
UITextFieldDelegate
to your.h
file and Delegate yourUITextField
in thenib
file.Second, add this code to your
.m
file :