2017-05-18 6 views
5

Hey Ich möchte überprüfen, ob UITextView (vielleicht könnte dies relevant oder nicht sein) enthält Telefonnummer im Text. Ich verwende Swift 2.3, aber wenn Sie es in Swift 3 haben, werde ich versuchen, es zu übersetzen.Überprüfen Sie, ob die Telefonnummer in String

Sollte für diese Eingänge für exemple arbeiten:

  • "Guten Morgen, 627.137.152"
  • "Guten Morgen, 34627217154"
  • "Guten Morgen, 627 11 71 54"

Der letzte Fall ist einfach, wenn andere funktioniert, ersetzen Sie einfach "" Vorkommen zu "" und überprüfen Sie die vorherige Funktion enthältPhone.

ich diese Lösung versucht, aber tut funktioniert nicht mit dem ersten Fall: (Find phone number in string - regular)

Danke.

+2

NSD ataDetector kann für Telefonnummern hilfreich sein: http://stackoverflow.com/a/36561378/1801544 – Larme

+0

Wenn Sie UITextView verwenden, hat es die Eigenschaft dataDetectorTypes, legen Sie einfach diese Eigenschaft auf [.phoneNumber] und das ist alles. – Raymond

Antwort

7

NSDataDetector bietet eine bequeme Möglichkeit, das zu tun:

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) 
} 

oder wenn Sie wollen, die Zahlen extrahieren

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

Vielen Dank, funktioniert wie ein Charme! – Eironeia

+0

Wie wird das in Swift 2.3 sein? Ich kann es nicht schaffen. – Eironeia

+0

Es tut mir leid, dass ich Swift 2 nicht mehr verwende. Bitte suchen Sie die Methodensignaturen in der Dokumentation. Ich möchte dich ermutigen, auf Swift 3 upzudaten. (Swift 4 steht bevor). – vadian

0

Diese func Zeichenfolge und kehrt Array der erkannten Telefone nimmt. Es ist mit NSDataDetector, wenn dieser Mechanismus nicht Ihre Bedürfnisse am Ende passen, werden Sie wahrscheinlich Ihre eigenen Algorithmus aufbauen müssen sein:

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

Sie Rufnr mit dieser Regex überprüfen -

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

Für Spiel (I aktuelles Projekt verwendet)

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 [] 
    } 
} 

Hier ist das Tester - enter image description here

Verwandte Themen