Swift 带两位数字的日期格式化程序24小时时间
我试图检查字符串是否包含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{
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在日期格式化程序方面是相同的。你真的需要区分这两个词,那么为什么不在开头逐字检查一下呢。请看我编辑的答案。它避免了日期格式化程序的检查。