Получая NSRange
из Swift String
, вы хотите использовать utf16
вместо utf8
:
func validate() -> Observable<Bool> {
return input.map { text in
guard let text = text else { return false }
let range = NSRange(location: 0, length: text.utf16.count)
return self.regex.firstMatch(in: text, range: range) != nil
}
}
Лично я нахожу логику между выбором utf8
илиutf16
неоправданно непрозрачен, и я использую инициализатор NSRange(_:in:)
:
func validate() -> Observable<Bool> {
return input.map { text in
guard let text = text else { return false }
let range = NSRange(text.startRange..., in: text)
return self.regex.firstMatch(in: text, range: range) != nil
}
}
При этом использование utf8.count
при сборке NSRange
только проявит этот сбой, если строкав нем были символы не ASCII.Возможно, это объясняет, почему, когда вы исправили это с помощью utf16
, сбой исчез, но ваша проверка по-прежнему не проходит.Строки должны содержать расширенные символы Юникода и, следовательно, по определению не соответствуют регулярному выражению.