2017-05-18 137 views
5

嘿,我想检查UITextView(也许这可能是相关与否)包含电话号码的文本。我正在使用Swift 2.3,但如果你在Swift 3中找到它,我会尝试翻译它。检查字符串中是否存在电话号码

如果这些输入的工作为例:

  • “早上好,627137152”
  • “早上好,34627217154”
  • “早上好,627 11 71 54”

最后一种情况,如果其他作品很简单,只需将“”出现替换为“”,并检查之前的功能是否包含电话。

我曾尝试这种解决方案,但没有工作原理与第一种情况:(Find phone number in string - regular

谢谢。

+2

NSD ataDetector可能对电话号码有帮助:http://stackoverflow.com/a/36561378/1801544 – Larme

+0

如果您使用的是UITextView,它具有属性dataDetectorTypes,因此只需将此属性设置为[.phoneNumber]即可。 – Raymond

回答

7

NSDataDetector提供了一个方便的方式来做到这一点:

let string = "Good morning, 627137152 \n Good morning, +34627217154 \n Good morning, 627 11 71 54" 

do { 
    let detector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.phoneNumber.rawValue) 
    let numberOfMatches = detector.numberOfMatches(in: string, range: NSMakeRange(0, string.characters.count)) 
    print(numberOfMatches) // 3 
} catch { 
    print(error) 
} 

,或者如果你想提取数字

let matches = detector.matches(in: string, range: NSMakeRange(0, string.characters.count)) 

for match in matches{ 
    if match.resultType == .phoneNumber, let number = match.phoneNumber { 
     print(number) 
    } 
} 
+0

非常感谢,作品像魅力! – Eironeia

+0

这将如何快速2.3?我无法得到它的工作。 – Eironeia

+0

对不起,我不再使用Swift 2了。请在文档中查找方法签名。我想鼓励你更新Swift 3.(Swift 4即将发布)。 – vadian

0

本功能需要检测手机的串并返回数组。它使用NSDataDetector,如果这种机制不适合到底你的需求,你大概就需要建立自己的算法:

func getPhoneNumber(from str: String) -> [String] { 
    let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.phoneNumber.rawValue) 
    let matches = detector.matches(in: str, options: [], range: NSRange(location: 0, length: str.characters.count)) 

    var resultsArray = [String]() 

    for match in matches { 
     if match.resultType == .phoneNumber, 
      let component = match.phoneNumber { 
      resultsArray.append(component) 
     } 
    } 
    return resultsArray 
} 
0

您可以查询手机没有与此正则表达式 -

1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))? 

要找到匹配(我使用当前项目)

func matches(for regex: String, in text: String) -> [String] { 

    do { 
     let regex = try NSRegularExpression(pattern: regex) 
     let nsString = text as NSString 
     let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length)) 
     print("\(results)") 
     return results.map { nsString.substring(with: $0.range)} 
    } catch let error { 
     print("invalid regex: \(error.localizedDescription)") 
     return [] 
    } 
} 

下面是测试结果 - enter image description here

相关问题