如何限制在文本字段中输入的年份大小[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何限制在文本字段中输入的年份大小[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我正在尝试为信用卡到期日做一个文本字段并使用以下代码。

    if range.length > 0 {
        return true
    }
    if string == "" {
        return false
    }
    if range.location > 6 {
        return false
    }
    var originalText = textField.text
    let replacementText = string.replacingOccurrences(of: " ", with: "")

    if !CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: replacementText)) {
        return false
    }

    if range.location == 4 {
        originalText?.append("/")
        textField.text = originalText
    }
    return true

但是,使用该代码的用户可以写入5145/52,这对于到期日来说是不正常的。如何限制2000年到2018年之间的年份和月份值01到12?

答案

通常,输入文本的格式及其验证是两个独立的问题。这是一个使用NSRegularExpression的好地方。这里有一个日期验证的例子,一年的范围是2000-2099,一个月是01-12。

func validate(string: String) -> Bool {
    let regex = try! NSRegularExpression(pattern: "^(20)\d\d[/](0[1-9]|1[012])$")

    return regex.firstMatch(in: string, options: [], range: NSMakeRange(0, string.characters.count)) != nil
}

validate(string: "2012/02") // true
validate(string: "2012/2")  // false
validate(string: "1912/12") // false
validate(string: "2012/112") // false

更新:

在你的情况下,它看起来像这样:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    guard let text = textField.text else { return true }
    let newLength = text.count + string.count - range.length
    let characterSet = CharacterSet(charactersIn: string)

    if text.characters.count == 4, !string.characters.isEmpty {
        textField.text = text + "/"
    }

    return CharacterSet.decimalDigits.isSuperset(of: characterSet) && newLength <= 7
}

func textFieldDidEndEditing(_ textField: UITextField) {
    guard let text = textField.text else { return }
    let isUserInputValid = validate(string: text)

    if !isUserInputValid {
        //TODO: Notify user that expiration date is invalid
    }
}

以上是关于如何限制在文本字段中输入的年份大小[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 TextField 的可见大小限制 UITextField 的输入文本量?

多年来在 IOS 中自动完成文本字段

在 GraphQL 中重用输入类型作为片段 [重复]

如何限制文本字段只能输入十进制数字?

当文本与文本字段大小相同时,如何停止在文本字段中输入字符?

如何仅在文本字段中输入数字[重复]