Ios 如何确保在UITextfield中输入的日期不超过特定日期?

Ios 如何确保在UITextfield中输入的日期不超过特定日期?,ios,swift,uitextfield,Ios,Swift,Uitextfield,我的意思是,我有一个生日字段,用户在其中输入他们的生日。我只是想确保他们输入的是像07-03-2001这样的合法日期,而不是像44-88-3333这样的假日期。我已经准备好了代码来确保它是正确的格式 static func isDateValid(value: String?) -> Bool { let test = String.trim(value) if (String.isNilOrEmpty(test)) { return false

我的意思是,我有一个生日字段,用户在其中输入他们的生日。我只是想确保他们输入的是像07-03-2001这样的合法日期,而不是像44-88-3333这样的假日期。我已经准备好了代码来确保它是正确的格式

 static func isDateValid(value: String?) -> Bool {
      let test = String.trim(value)
      if (String.isNilOrEmpty(test)) {
        return false
      }
      let dateRegEx = "^\\d{2}-\\d{2}-\\d{4}$"
      let dateTest = NSPredicate(format: "SELF MATCHES %@", dateRegEx)
      let result =  dateTest.evaluateWithObject(test)
      return result
    }


   userBirthday = String.trim(self.birthdayTextField!.text)
      if (!String.isDateValid(userBirthday)) {

        showAlertWithTitle("Error".localized(), message: "birthday not valid, please enter in format 07-05-1990".localized() )

        return

您可以使用日期格式化程序,它将验证日期,如果日期无效,则返回nil

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"

    if let date = dateFormatter.dateFromString("25-34-2014")
    {
        print("true date:\(date)")
    }
    else
    {
        print("wrong date")
    }

您可以使用默认的NSDateFormatter()函数,并使用.dateFormat将格式设置为该值。使用“dd”表示日,“MM”表示月,“yyy”表示年。然后在if语句中使用.dateFromString(包含date的stringthat)来测试它是否在其中

例如:

 let date = theTextField.text
 let dateFormat = NSDateFormatter()
 dateFormat.dateFormat = "dd-MM-yyyy"

if let date = dateFormatr.dateFromString(date)
{
    print("This Date Is formatted correctly")
}

我采用了与其他人不同的方法,通过使用日期选择器,您可以通过
minimumDate
maximumDate
指定限制。在我看来,这为用户提供了一个更干净的界面,而不是强迫他们输入可能是错误的日期

import UIKit

class ViewController: UIViewController {
    // Connection to textfield in the storyboard that user uses to interact with date picker
    @IBOutlet weak var dateField: UITextField!
    @IBOutlet weak var pickerView: UIDatePicker!

    // This particular max date is one day in the future. You can modify it to suit your needs
    var maximumDate: NSDate {
        return NSCalendar.currentCalendar()
            .dateByAddingUnit(
                .Day,
                value: 1,
                toDate: NSDate(),
                options: []
            )!
    }

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

    func setupPicker() {
        // This line replaces the standard keyboard with the date picker
        dateField.inputView = pickerView
        // This line prevents a crash related to using the date picker in place of the keyboard
        pickerView.removeFromSuperview()
        pickerView.minimumDate = NSDate()
        pickerView.maximumDate = maximumDate
    }

    // Connect an action from the datepicker in your storyboard file to here
    @IBAction func dateSelected(sender: UIDatePicker) {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "dd-MM-yyyy HH:mm"
        dateField.text = dateFormatter.stringFromDate(sender.date)
        dateField.resignFirstResponder()
    }
}
以及它在行动中的表现


如果不支持该日期,则该日期将显示为浅灰色而不是黑色。

简单。只需将pickerView.maximumDate设置为所需的最大日期。

使用日期选择器可能是最好的方法。但是,因为这不是您所要求的,所以在正则表达式中有一个选项

let dateRegEx = "^(0[1-9]|[12][0-9]|3[01])[- \\.](0[1-9]|1[012])[- \\.](19|20)\\d\\d$"

年份-1900至2099。

使用日期选择器作为具有最大日期的文本字段输入视图