【发布时间】:2019-04-20 19:41:36
【问题描述】:
我正在尝试为日期创建一个正则表达式字符串,例如this。我的代码(Swift 5 示例):
let dateValidator = TextValidator(input: dateTextField.rx.text.asObservable(), regex: try! NSRegularExpression(pattern:
#"^\s*(3[01]|[12][0-9]|0?[1-9])\.(1[012]|0?[1-9])\.((?:19|20)\d{2})\s*$"#))
let v = Observable.combineLatest(dateValidator.validate(), anotherValidator.validate()) {
(date, another) in
return date && another
}
//another code
class TextValidator {
var input: Observable<String?>
var regex: NSRegularExpression
init(input: Observable<String?>, regex: NSRegularExpression) {
self.input = input
self.regex = regex
}
func validate() -> Observable<Bool> {
return input.map { text in
let range = NSRange(location: 0, length: text!.utf8.count)
return self.regex.firstMatch(in: text!, options: [], range: range) != nil
}
}
}
我得到错误:
由于未捕获的异常“NSRangeException”而终止应用程序,原因: '*** -[NSRegularExpression enumerateMatchesInString:options:range:usingBlock:]:范围或索引 越界”
另一个正则表达式正常工作。我认为正则表达式中的反斜杠错误。
【问题讨论】:
-
但是没有Detector怎么创建呢?只有 dd.mm.yyyy 的正则表达式
-
我的 NSRange 代码工作正常,正则表达式行有问题
-
我将 utf8 更改为 utf16 并且我的所有验证器都无法正常工作(返回 false,我认为(项目没有崩溃))...
-
如果 utf16 - 我没有错误。代码
v.bind(to: saveNewItemBarButtonItem.rx.isEnabled).disposed(by: self.disposeBag)未设置启用我的条形按钮项