2016-07-29 12 views
1

Was ich damit meine ist, habe ich einen Geburtstag Feld Benutzer geben Sie ihren Geburtstag in. Ich möchte nur sicherstellen, dass sie legitime Daten wie 07-03-2001 eingeben, nicht gefälschte Daten wie 44-88-3333. Ich habe bereits Code, um sicherzustellen, dass es das richtige Format ist.Wie kann sichergestellt werden, dass ein in einem UITextfield eingegebenes Datum nicht über ein bestimmtes Datum hinausgeht?

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 
+3

eine Datumsauswahl als Textfeldeingabe Ansicht Verwenden Sie mit maximalem Datum –

+0

http: // Stackoverflow .com/a/31418374/2303865 –

Antwort

0

können Sie Datum Formatierer verwenden es Datum validieren & gibt nil zurück, wenn das Datum ungültig ist

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

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

Sie die Standardeinstellung verwenden können NSDateFormatter() Funktion, und verwenden Sie .dateFormat das Format auf diese Option setzen . Verwenden Sie "dd" für den Tag, "MM" für den Monat und "yyyy" für das Jahr. Verwenden Sie dann .dateFromString (stringThatContainsTheDate) innerhalb einer if-Anweisung, um zu testen, ob sie darin enthalten ist.

Beispiel:

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

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

Ich nahm einen anderen Ansatz als das, was die anderen verwendet wird, durch eine Datumsauswahl mit dem Sie die Möglichkeit, durch minimumDate und maximumDate Grenzen angeben gibt. Meiner Meinung nach bietet dies eine viel sauberere Schnittstelle für den Benutzer, anstatt sie dazu zu zwingen, Daten einzugeben, die möglicherweise falsch sind.

Und wie es in Aktion aussieht.

enter image description here

Wenn das Datum nicht unterstützt wird, wird es dann in hellgrau erscheint eher als schwarz.

0

Einfach. Setzen Sie pickerView.maximumDate gleich auf das gewünschte maximale Datum.

0

Die Verwendung eines DatePicker ist wahrscheinlich der beste Ansatz. Da jedoch das ist nicht das, was Sie gefragt, hier ist eine Option in regulärem Ausdruck

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

year - 1900 bis 2099