【发布时间】:2019-08-12 06:31:14
【问题描述】:
我正在尝试实时验证密码文本字段(Swift 4.2 和 Xcode 10.2.1)。
我的问题是如何验证 UITextField 的 shouldChangeCharactersInrange 方法中列出的条件?
- 最少 8 个字符
- 最多 50 个字符
- 最少 1 个字母
- 最少 1 个号码
- 无特殊字符
此外,所有 4 条验证消息的左侧都会有一个灰色刻度图像。只要条件不满足,图像就会被灰色打勾。如果验证成功,刻度图像将变为绿色。
当我点击屏幕上的确认按钮时,我将不得不调用设置新密码 API。当在 shouldChangeCharactersInrange 方法中满足上述所有条件时,我正在考虑将 bool isValidationSuccess 设置为 true。
在点击确认按钮时,只有当 isValidationSuccess 为 true 时才会调用 api。
这是我到目前为止所管理的。你能帮帮我吗?
// MARK: - TextField delegate methods
extension SetNewPasswordViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
let minPasswordLength = 8
let currentString: NSString = newPasswordTextfield.text! as NSString
let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString
if newString.length < minPasswordLength {
minimumCharacterValidationImage.isHighlighted = false
} else {
minimumCharacterValidationImage.isHighlighted = true
}
return true
}
}
【问题讨论】:
-
如果您的方法返回布尔值,为什么要使用
.replacingCharacters?我想你可以使用range,比如:return newPasswordTextfield.text.range(of: "^(?=\\D*\\d)(?=\\d*[A-Za-z])[A-Za-z0-9]{8,50}$", options: .regularExpression) != nil -
@WiktorStribiżew:能否验证我找到的解决方案?我已将其添加为答案。
标签: ios swift regex uitextfield