gpt4 book ai didi

ios - 编辑时检查文本字段文本

转载 作者:行者123 更新时间:2023-12-01 19:35:46 26 4
gpt4 key购买 nike

我有一个 textField看起来像这样:

enter image description here

我想跟踪用户输入的内容。如果文本输入与文本字段下方的条件之一匹配,则“x”应更改为“checkImage”。

我已经有一个 TextFieldDidChange方法:

@objc func passwordTextFieldDidChange(_ textField: UITextField) {
if textField.text == "" {
self.eyeButton.isHidden = true
}else {
self.eyeButton.isHidden = false
}

}

问题:

如何检查文本:
1. 至少 1 个大写字母 + 1 个小写字母
2. 至少 1 位数
3. 至少长度 8

之后我还使用此方法检查密码强度:
static func isPasswordValid(_ password : String) -> Bool {

/*
^ Start anchor
(?=.*[A-Z].*[A-Z]) Ensure string has two uppercase letters.
(?=.*[!@#$&*]) Ensure string has one special case letter.
(?=.*[0-9].*[0-9]) Ensure string has two digits.
(?=.*[a-z].*[a-z].*[a-z]) Ensure string has three lowercase letters.
.{8} Ensure string is of length 8.
$ End anchor.
*/

let passwordTest = NSPredicate(format: "SELF MATCHES %@", "^(?=.*[A-Z]).(?=.*[0-9]).(?=.*[a-z]).{8,}$")
return passwordTest.evaluate(with: password)
}

但用户也应该得到“实时”反馈,无论密码是否符合 3 个标准。

如果我的问题不清楚或者您需要更多信息,请告诉我。感谢每一个帮助:)

最佳答案

这是一个棘手的问题,但你在正确的轨道上。

I also check the password strength afterwards with this method



不清楚您何时调用 isPasswordValid(:)但这需要在文本字段更改后完成,最好是在 passwordTextFieldDidChange(:) 中功能。

奖励:您可以将眼睛按钮的更新移动到一个单独的功能中,以提高可读性。
@objc func passwordTextFieldDidChange(_ textField: UITextField) {
self.updateEyeButton(show: !textField.isEmpty)
self.validate(password: textField.text)
}

有很多不同的方法可以完成这项任务,但这个应该是不言自明的,随时询问您是否需要进一步说明。

您将需要单独验证您的每个需求。在您当前的 isPasswordValid(:)功能,您一起检查所有要求,这使得无法确定哪个通过/失败。

您可以做的是创建一个单独的结构来验证需求,在这种情况下,我们将其命名为 PasswordValidator .此结构验证给定密码是否符合您的要求,如果不符合,则将缺少的要求返回给您。一旦你有一系列缺失的需求,你就可以对每一个采取行动(在你的情况下,为每一个改变图标)。

像这样的东西(未经测试):
private struct PasswordValidator {

private enum Result {
case valid
case invalid([Validator.Requirement])
}

private enum Requirement: String {
case minimumOneUppercaseOneLowercase = "(?=.*[A-Z]).(?=.*[a-z])"
case minimumOneDigit = "(?=.*[0-9])"
}

static func validate(password: String) -> PasswordValidator.Result {

let missingRequirements = [Requirement]()

if !evaluate(password: password, requirement: .minimumOneUppercaseOneLowercase) {
missingRequirements.append(.minimumOneUppercaseOneLowercase)
}

if !evaluate(password: password, requirement: .minimumOneDigit) {
missingRequirements.append(.minimumOneDigit)
}

if missingRequirements.isEmpty == false {
return .invalid(missingRequirements)
}

return .valid
}

private static func evaluate(password: String, requirement: PasswordValidator.Requirement) -> Bool {
let predicateString = "^\(requirement.rawValue)$"
let passwordTest = NSPredicate(format: "SELF MATCHES %@", predicateString)
return passwordTest.evaluate(with: password)
}
}

如您所见, PasswordValidator.Requirement 中的每一个枚举案例有一个包含谓词的关联值(非常未经测试!)

现在在您的 View Controller 中,您可以使用一个简单的函数来处理验证结果(从您的 passwordTextFieldDidChange(:) 函数调用:
private func validate(password: String) {

let validationResult = PasswordValidator.validate(password: password)

switch validationResult {
case .valid:
// All should be checkmarks
// self.updateIcons(missingRequirements: nil)
case .invalid(let missingRequirements):
// Change the icons
// self.updateIcons(missingRequirements: missingRequirements)
}
}

关于ios - 编辑时检查文本字段文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60243122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com