Swift:validation用户名输入

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

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

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

你可以用

^\w{7,18}$ 

要么

 \A\w{7,18}\z 

请参阅正则表达式演示

图案细节

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

SWIFT代码

请注意,如果将其与NSPredicateMATCHES ,则不需要字符串锚点的开始/结束,因为默认情况下将匹配匹配:

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

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

 func isValidInput(Input:String) -> Bool { return Input.range(of: "\\A\\w{7,18}\\z", options: .regularExpression) != nil } 
 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 } 
 func isValidUsername(testStr:String) -> Bool { var rawString: String = testStr var whitespace: NSCharacterSet = NSCharacterSet.whitespaceAndNewlineCharacterSet() trimmed = rawString.stringByTrimmingCharactersInSet(whitespace) if trimmed.characters.count>0 { return true } else { return false } } 

如果用户名必须有8-15个字符,必须以字母开头,可以包含字母,数字_或 –

尝试这个

 func isValidUsername(_ username : String) -> Bool{ if username.count > 7 && username.count < 16{ let regex = "^[az]([a-z0-9]*[-_][a-z0-9][a-z0-9]*)$" let passwordTest = NSPredicate(format: "SELF MATCHES %@", regex) return passwordTest.evaluate(with: username) }else{ return false } } 

结果如下: - “a_aba098”,“zasdsd-89”,“df_90dssggg”等。