Controlla se esiste il numero di telefono in String

Ehi, vorrei verificare se UITextView (forse questo potrebbe essere rilevante o less) contiene il numero di telefono nel text. Sto usando Swift 2.3 , ma se lo hai preso in Swift 3 cercherò di tradurlo.

Dovrebbe funzionare per questi ingressi per esempio:

  • "Buongiorno, 627137152"
  • "Buongiorno, +34627217154"
  • "Buongiorno, 627 11 71 54"

L'ultimo caso è facile se altri lavori, basta sostituire "" occorrenze a "" e controllare la function precedente contienePhone.

Ho provato questa soluzione ma non funziona con il primo caso: ( Trova il numero di telefono nella string – regolare )

Grazie.

Solutions Collecting From Web of "Controlla se esiste il numero di telefono in String"

NSDataDetector fornisce un modo conveniente per farlo:

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

o se vuoi estrarre i numbers

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

Questa function prende la string e restituisce l'arrays dei telefoni rilevati. Sta usando NSDataDetector, se alla fine questo meccanismo non si adatta alle tue esigenze, probabilmente dovrai compilare il tuo algorithm:

 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 } 

Puoi controllare il telefono no con questa espressione regolare –

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

Per trovare la corrispondenza (sto usando il progetto attuale)

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

Ecco il risultato del test – inserisci la descrizione dell'immagine qui