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

时间:2016-07-29 22:16:24

标签: 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
      }
      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

5 个答案:

答案 0 :(得分:0)

您可以使用日期格式化程序来验证日期和格式如果日期无效,则返回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")
    }

答案 1 :(得分:0)

您可以使用默认的NSDateFormatter()函数,并使用.dateFormat将格式设置为该函数。白天使用“dd”,月份使用“MM”,年份使用“yyyy”。然后在if语句中使用.dateFromString(stringThatContainsTheDate)来测试它是否在其中。

示例:

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

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

答案 2 :(得分:0)

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

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()
    }
}

它的行动方式。

enter image description here

如果不支持日期,它将以浅灰色而不是黑色显示。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

使用DatePicker可能是最好的方法。但是,由于这不是你提出的要求,这里是正则表达式中的一个选项

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

年 - 1900年至2099年。