Swift 带两位数字的日期格式化程序24小时时间

Swift 带两位数字的日期格式化程序24小时时间,swift,dateformatter,Swift,Dateformatter,我试图检查字符串是否包含24小时时间。 这是我目前的代码: func isMilTime(from string: String) -> Bool { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "HH:mm" if (dateFormatter.date(from: string) != nil) { return true }else{

我试图检查字符串是否包含24小时时间。 这是我目前的代码:


func isMilTime(from string: String) -> Bool {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm"
    if (dateFormatter.date(from: string) != nil) {
        return true
    }else{
        return false
    }
}
print(isMilTime(from: "9:2")) //true

目前,像“9:2”这样的一位数时间返回为真。如何修改此选项以仅检测两位数的时间,如“9:02”

要仅检查我建议的正则表达式解决方案的格式,它将返回
true
范围
0:00–23:59

func isMilTime(from string: String) -> Bool {
    return string.range(of: "^(2[0-3]|[01]?\\d):[0-5]\\d$", options: .regularExpression) != nil
}

print(isMilTime(from: "9:2")) //false

使用regex检查@vadian建议的格式似乎是可行的

func isMilTime(from string: String) -> Bool {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm"
    if (dateFormatter.date(from: string) != nil) && isMilTimeReg(from: string) {
        return true
    }else{
        return false
    }
}

func isMilTimeReg(from string: String) -> Bool {
    return string.range(of: "^\\d{1,2}:\\d{2}$", options: .regularExpression) != nil
}

print(isMilTime(from: "2:3"))//false

是否允许
9:02
<代码>9只是一个位数?是否要打印(isMilTime(from:“9:2”))打印错误?@zeytin是。因为如果我从时间中删除分号,如
dateFormatter.dateFormat=“HHmm”
,则print(isMilTime(from:“32”))为true。所以为了消除这一点,我需要它返回false。@Sweeper我只需要分钟部分有两个数字。@Ibrahim99我不明白为什么需要删除分号。9:20和9.2在日期格式化程序方面是相同的。你真的需要区分这两个词,那么为什么不在开头逐字检查一下呢。请看我编辑的答案。它避免了日期格式化程序的检查。