文本字段文本(一个或多个)正则表达式检查 Swift UIKit

问题描述 投票:0回答:1

我创建了正则表达式逻辑,它工作正常,但除了一个文本字段之外,我还可以拥有其中的几个文本字段,我创建了一个字典和一个变量,以便它给我一个 bool 值 true,前提是所有传递正则表达式的文本字段验证为 true,但尽管如此,当一个文本字段返回 true 时,allFieldsValid 也返回 true,我需要所有文本字段通过正则表达式检查并接收值 true,我该如何解决此问题?如果我的代码不正确,请帮助我纠正它。

我写下我的细胞代码

var regexValidate: Bool? = false
var validationResults: [String: Bool] = [:]
var allFieldsValid: Bool? = false
var requiredFields: Set<String> = []


 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, 
 replacementString string: String) -> Bool {

  if let regexPattern = regex {
            print("IT IS REGEX!!--> [ \(regexPattern)")
            let prospectiveText = (textField.text as NSString?)?.replacingCharacters(in: range,
             with: string) ?? string
            regexValidate = regexValidate(prospectiveText, withPattern: regexPattern)
            if regexPattern == ""{
                regexValidate = true
            }
            validationResults[paymentParametrName ?? ""] = regexValidate ?? false
            requiredFields.insert(paymentParametrName ?? "")
            allFieldsValid = checkAllFieldsValid()
            print(" IS VALIDATE FOR CURRENT TEXTFIELD?? -->\(regexValidate) ] ---")
            print("--->FULL Validation TEXTFIELDS: \(allFieldsValid)")
        }
   return true
 }


 private func regexValidate(_ text: String, withPattern pattern: String) -> Bool {
    let regex = try? NSRegularExpression(pattern: pattern)
    let range = NSRange(location: 0, length: text.utf16.count)
    let matches = regex?.matches(in: text, options: [], range: range) ?? []
    return matches.count == 1 && matches.first?.range == range
 }

 private func checkAllFieldsValid() -> Bool {
       for field in requiredFields {
           if validationResults[field] != true {
               return false
           }
       }
       return !requiredFields.isEmpty
   }
ios swift regex uikit uitextfield
1个回答
0
投票

导入UIKit

ViewController 类:UIViewController {

let textField1 = UITextField()
let textField2 = UITextField()

override func viewDidLoad() {
    super.viewDidLoad()
    setupTextFields()
}

func setupTextFields() {
    textField1.placeholder = "Enter text 1"
    textField2.placeholder = "Enter text 2"

    textField1.borderStyle = .roundedRect
    textField2.borderStyle = .roundedRect

    textField1.translatesAutoresizingMaskIntoConstraints = false
    textField2.translatesAutoresizingMaskIntoConstraints = false

    view.addSubview(textField1)
    view.addSubview(textField2)

    NSLayoutConstraint.activate([
        textField1.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        textField1.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: -20),
        textField1.widthAnchor.constraint(equalToConstant: 200),

        textField2.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        textField2.topAnchor.constraint(equalTo: textField1.bottomAnchor, constant: 20),
        textField2.widthAnchor.constraint(equalToConstant: 200)
    ])

    textField1.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
    textField2.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
}

func isValidText(_ text: String, pattern: String) -> Bool {
    let regex = try! NSRegularExpression(pattern: pattern)
    let range = NSRange(location: 0, length: text.utf16.count)
    return regex.firstMatch(in: text, options: [], range: range) != nil
}

@objc func textFieldDidChange(_ textField: UITextField) {
    let pattern = "^[a-zA-Z0-9]*$" // Example pattern: Alphanumeric characters only
    if let text = textField.text, isValidText(text, pattern: pattern) {
        textField.layer.borderColor = UIColor.green.cgColor
        textField.layer.borderWidth = 1.0
    } else {
        textField.layer.borderColor = UIColor.red.cgColor
        textField.layer.borderWidth = 1.0
    }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.