作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
<分区>
我正在开发一个可处理电话号码的应用程序,但我在使用正则表达式查找字符串中的电话号码时遇到问题。
我的应用会查看联系人的电话号码,它可以是:
(带破折号“-”)
XXXX-XXXX
XXXXX-XXXXX
(YY) XXXX-XXXX
(YY) XXXXX-XXXX
+ZZ (YY) XXXX-XXXX
+ZZ (YY) XXXXX-XXXX
(无破折号)
XXXXXXXX
XXXXXXXXX
(YY) XXXXXXXX
(YY) XXXXXXXXX
+ZZ (YY) XXXXXXXX
+ZZ (YY) XXXXXXXXX
基于上述所有这些可能性,我编写了以下代码:
let range = telefone.rangeOfString("[0-9]{4,5}-[0-9]{4}", options:.RegularExpressionSearch)
let range2 = telefone.rangeOfString("[0-9]{9}$", options:.RegularExpressionSearch)
var found: String?
if range != nil{
found = telefone.substringWithRange(range!)
}else if range2 != nil{
found = telefone.substringWithRange(range2!)
}
print(found)
range
是查找电话号码的正则表达式(带破折号“-”)range2
是为电话号码提供资金的正则表达式(没有破折号)
使用这个代码,我只得到电话号码,没有国家代码或区号。
问题是,当我使用
+ZZ (YY) XXXXX-XXXX
有人能帮我找到另一种方法来编写正则表达式以仅获取包含所有联系电话号码的字符串的“X”值吗?
更新:
注意到上面的代码,变量范围,返回null
var telefone = "+42 43 23123-2221"
let range = telefone.rangeOfString("\\d{4,5}\\-?\\d{4}", options:.RegularExpressionSearch)
print("range \(range)") //here returns nil
我是一名优秀的程序员,十分优秀!