[Swift] Über die Unfähigkeit, mit NS Predicate zwischen voller und halber Breite zu unterscheiden

Unterscheiden der vollen halben Breite mit NS Predicate

Mit dem folgenden Code wird ermittelt, ob die Mobiltelefonnummer in alphanumerischen Zeichen halber Breite eingegeben wird. Auf den ersten Blick scheint es normal zu funktionieren, aber damit wird true zurückgegeben, unabhängig davon, ob es als "090-0000-0000" mit voller Breite oder als "090-0000-0000" mit halber Breite beurteilt wird, und es ist nicht möglich, zwischen voller Breite und halber Breite zu unterscheiden.

func checkPhoneNum(string: String) -> Bool {
  let format = "[0-9]{3}-[0-9]{4}-[0-9]{4}"
  let predicate = NSPredicate(format:"SELF MATCHES %@", format)
  return predicate.evaluate(with: string)
}

Unterscheidung der vollen Halbwertsbreite in NSRegularExpression

Wie oben erwähnt, kann NS Predicate nicht alle Zeichen mit halber Breite unterscheiden, daher trifft NS Regular Expression die folgenden Beurteilungen. Dies gibt false für die volle Breite und true für die halbe Breite zurück.

func checkPhoneNum(string: String) -> Bool {
  let format = "[0-9]{3}-[0-9]{4}-[0-9]{4}"
  let regexp = try! NSRegularExpression.init(pattern: format, options: [])
  let nsString = string as NSString
  let matchRet = regexp.firstMatch(in: string, options: [], range: NSRange.init(location: 0, length: nsString.length))
  return matchRet != nil
}

Referenz

http://aryzae.hatenablog.com/entry/2017/12/13/004159

Recommended Posts

[Swift] Über die Unfähigkeit, mit NS Predicate zwischen voller und halber Breite zu unterscheiden
[Java] Richten Sie Zeichen auch mit gemischten Zeichen halber und voller Breite aus
Über den Unterschied zwischen irb und pry
[Rails / Active Record] Über den Unterschied zwischen create und create!
Unterscheiden Sie mit regulären Ausdrücken zwischen ganzen Zahlen und Brüchen
[Ruby] Ich habe über den Unterschied zwischen each_with_index und each.with_index nachgedacht
[Rails] Ich habe den Unterschied zwischen Ressourcen und Ressourcen untersucht
Konvertieren Sie das Array von error.full_messages in Zeichen und geben Sie es aus
Unterschiede zwischen Klassen und Instanzen in Ruby
Informationen zur Beziehung zwischen HTTP-Methoden, Aktionen und CRUD
Vermitteln Sie mit Gradle den Streit zwischen Power Mock und Jacoco
[Swift] UITextField hat mir den Unterschied zwischen Null und "" beigebracht.