Ios 如何确保在UITextfield中输入的日期不超过特定日期?
我的意思是,我有一个生日字段,用户在其中输入他们的生日。我只是想确保他们输入的是像07-03-2001这样的合法日期,而不是像44-88-3333这样的假日期。我已经准备好了代码来确保它是正确的格式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
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。使用日期选择器作为具有最大日期的文本字段输入视图