ios - 如何在 iOS swift 4 中进行名字验证?

标签 ios swift uitextfield uitextfielddelegate

我要在 UITextField 中的 swift4 中完成名字验证。问题是:

  1. 名字应以字母开头,以字母结尾,
  2. 没有尾随和前导空格。
  3. 它们之间可以有空格,可以包含点。
  4. 应介于 7 到 18 个字符之间。

目前我在 UITextField 中进行以下验证

public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let STRING_ACCEPTABLE_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    switch textField {
    case firstName:
        print("firstname")
        if string == " " {
            return false
        } else {
            let cs = NSCharacterSet(charactersIn: STRING_ACCEPTABLE_CHARACTERS).inverted
            let filtered = string.components(separatedBy: cs).joined(separator: "")
            return (string == filtered)
        }
    }
    return true
}

知道如何实现以下条件。现在我正在禁用空格,只接受字母。

非常感谢任何帮助

最佳答案

你可以使用这个函数来实现简洁明了的方式

func isValid(testStr:String) -> Bool {
    guard testStr.count > 7, testStr.count < 18 else { return false }

    let predicateTest = NSPredicate(format: "SELF MATCHES %@", "^(([^ ]?)(^[a-zA-Z].*[a-zA-Z]$)([^ ]?))$")
    return predicateTest.evaluate(with: testStr)
}

测试用例

isValid(testStr: " MyNameIsDahiya") // Invalid, leading space
isValid(testStr: "MyNameIsDahiya ") // Invalid, trailing space
isValid(testStr: " MyNameIsDahiya ") // Invalid, leading & trailing space
isValid(testStr: "1MyNameIsDahiya") // Invalid, Leading num
isValid(testStr: "MyNameIsDahiya1") // Invalid, trailing num
isValid(testStr: "1MyNameIsDahiya1") // Invalid, leading & trailing num
isValid(testStr: "MyName") // Invalid, length below 7
isValid(testStr: "MyNameIsDahiyaBlahhblahh") // Invalid, length above 18

isValid(testStr: "MyNameIsDahiya") // Valid,
isValid(testStr: "Mr. Dahiya") // Valid,

Playground 测试

enter image description here

Edit

试试下面的正则表达式:

(?mi)^[a-z](?!(?:.*\.){2})(?!(?:.* ){2})(?!.*\.[a-z])[a-z. ]{5,16}[a-z]$

它还将验证所有条件和长度。

关于ios - 如何在 iOS swift 4 中进行名字验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55181606/

相关文章:

ios - 如何将数字转换为其枚举?

ios - 如何在 iOS 中更改状态栏文本颜色

ios - XCode 崩溃报告(已符号化)缺少行号

iphone - 自定义 UITextField

ios - 如何使用 swift 处理 TextView 和文本字段中的空格值

ios - 使用 Swift 进行图像处理具有随机效果

ios - 如何在 iOS App Store 中找到我的应用程序的准确评级?

ios - CoreData 通过属性总和而不是单个记录进行奖励

ios - 用户个人资料中的 Facebook 名称

ios - 在 Swift 中将自定义输入 View 添加到 UITextField