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代码
请注意,如果将其与NSPredicate
和MATCHES
,则不需要字符串锚点的开始/结束,因为默认情况下将匹配匹配:
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”等。