2016-12-07 22 views
0

我需要檢查用戶是否以某種格式輸入日期。我從UITextField得到這個輸入,然後我試圖驗證這種方式:DateFormatter沒有實際檢查日期格式

func checkDateInput(inputStr: String) -> Bool { 

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

    if let date = dateFormatter.date(from: inputStr) { 
     return true 
    } 

    return false 
} 

之前調用這個方法,我檢查inputStr不是空的。 當我運行應用程序和我輸入,例如,「12/07/2016」,我得到true作爲checkDateInput(inputStr: "12/07/2016")的結果,但我期望得到false,因爲我想讓用戶輸入「12-07- 2016" 。它看起來像DateFormatter不以我提供的格式考慮「 - 」和「/」不同的字符。

我怎樣才能實現與日期格式完全匹配?

+0

因爲DateFormatter仍然可以格式化該輸入錯誤的返回TRUE。如果你所需要的只是正確的字符串,只需調用dateFormatter.string(from:date)即可得到正確的字符串。如果檢查更重要,您將不得不使用我不熟悉的正則表達式來幫助您或使用本機字符串函數進行檢查 –

回答

0

對於簡單的解決方案,你可以在2檢查的性格,你的inputStr5位置像這樣

func checkDateInput(inputStr: String) -> Bool { 

    let ch2 = inputStr[inputStr.index(inputStr.startIndex, offsetBy: 2)] 
    let ch5 = inputStr[inputStr.index(inputStr.startIndex, offsetBy: 5)] 

    if ch2 != "-" || ch5 != "-" { 
     return false 
    } 

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

    if let date = dateFormatter.date(from: inputStr) { 
     return true 
    } 

    return false 
}