Swift:验证用户名输入

ksa*_*der 7 regex ios swift

在Swift应用程序上工作,我有一个用户填写的表单,我希望用户选择自己的用户名.我想要用户名的唯一限制是:

  • 没有特殊字符(例如@,#,$,%,&,*,(,),^,<,>,!,±)
  • 只允许使用字母,下划线和数字
  • 长度最多18个字符,最少7个字符

在哪里可以找到验证输入字符串(函数参数)并根据上述条件返回true或false的函数?我不太熟悉正则表达式.

Wik*_*żew 18

你可以用

^\w{7,18}$
Run Code Online (Sandbox Code Playgroud)

要么

\A\w{7,18}\z
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

图案细节:

  • ^- 字符串的开头(可以替换\A以确保字符串的开始仅匹配)
  • \w{7,18}- 7到18个字符(即任何Unicode字母,数字或下划线,如果您只允许使用ASCII字母和数字,请使用[a-zA-Z0-9][a-zA-Z0-9_]替代)
  • $- 字符串结束(用于验证,我宁愿使用\z以确保字符串结尾只匹配).

SWIFT代码

请注意,如果您使用NSPredicateMATCHES,则不需要字符串锚点的开始/结束,因为匹配将默认锚定:

func isValidInput(Input:String) -> Bool {
    let RegEx = "\\w{7,18}"
    let Test = NSPredicate(format:"SELF MATCHES %@", RegEx)
    return Test.evaluateWithObject(Input)
}
Run Code Online (Sandbox Code Playgroud)

否则,你不应该省略锚点:

func isValidInput(Input:String) -> Bool {
    return Input.range(of: "\\A\\w{7,18}\\z", options: .regularExpression) != nil
}
Run Code Online (Sandbox Code Playgroud)


Sha*_* Of 7

func validateUsername(str: String) -> Bool
{
    do
    {
        let regex = try NSRegularExpression(pattern: "^[0-9a-zA-Z\\_]{7,18}$", options: .CaseInsensitive)
        if regex.matchesInString(str, options: [], range: NSMakeRange(0, str.characters.count)).count > 0 {return true}
    }
    catch {}
    return false
}
Run Code Online (Sandbox Code Playgroud)